import CryptoJS from "crypto-js";


const decrypt =  (encryptStr: string) => {
    let encryptData: any = CryptoJS.enc.Base64.parse(encryptStr).toString(CryptoJS.enc.Utf8);
    encryptData = JSON.parse(encryptData);
    let iv = CryptoJS.enc.Base64.parse(encryptData.iv);
    var decrypted = CryptoJS.AES.decrypt(encryptData.value,  CryptoJS.enc.Base64.parse(process.env.NEXT_PUBLIC_APP_KEY_CLIENT || ''), {
        iv : iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    });
    return JSON.parse(decrypted.toString(CryptoJS.enc.Utf8));
};

const encrypt =  (data:any)  => {
    let iv: any = CryptoJS.lib.WordArray.random(16);
   
    let options = {
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    };
    let encrypted: any = CryptoJS.AES.encrypt(data, CryptoJS.enc.Base64.parse(process.env.NEXT_PUBLIC_APP_KEY_CLIENT || ''), options);
    encrypted = encrypted.toString();
    iv = CryptoJS.enc.Base64.stringify(iv);
    let result: any = {
        iv: iv,
        value: encrypted,
        mac: CryptoJS.HmacSHA256(iv + encrypted, CryptoJS.enc.Base64.parse(process.env.NEXT_PUBLIC_APP_KEY_CLIENT || '')).toString()
    }
    result = JSON.stringify(result);
    result = CryptoJS.enc.Utf8.parse(result);
    return CryptoJS.enc.Base64.stringify(result);
};

export { decrypt, encrypt };