package com.takensoft.common.util;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.Base64.Encoder;
import java.util.Base64.Decoder;

/**
 * @author takensoft
 * @since 2024.04.03
 * 암복호화
 */
@Component
public class Secret {

    private static final Charset UTF_8 = StandardCharsets.UTF_8;

    private static String SECRET_KEY;

    private static String VECTOR_KEY;

    public Secret(@Value("${crypto.secret}")String secret, @Value("${crypto.vector}")String vector) {
        this.SECRET_KEY = secret;
        this.VECTOR_KEY = vector;
    }

    /**
     * @author takensoft
     * @since 2024.04.03
     * 암호화
     */
    public static String encrypt(String data) {
        Encoder encoder = Base64.getEncoder();
        byte[] message = data.getBytes(UTF_8);
        byte[] encryptedData = KISA_SEED_CBC.SEED_CBC_Encrypt(SECRET_KEY.getBytes(), VECTOR_KEY.getBytes(), message, 0, message.length);
        return new String(encoder.encode(encryptedData), UTF_8);
    }

    /**
     * @author takensoft
     * @since 2024.04.03
     * 복호화
     */
    public static String decrypt(String encryptedData) {
        Decoder decoder = Base64.getDecoder();
        byte[] message = decoder.decode(encryptedData);
        byte[] decryptedData = KISA_SEED_CBC.SEED_CBC_Decrypt(SECRET_KEY.getBytes(), VECTOR_KEY.getBytes(), message, 0, message.length);
        return new String(decryptedData, UTF_8);
    }
}