import CryptoJS from 'crypto-js';

/**
 * AES 加密
 * @param word: 需要加密的文本
 * KEY: // 需要前后端保持一致
 * mode: ECB // 需要前后端保持一致
 * pad: Pkcs7 //前端 Pkcs7 对应 后端 Pkcs5.Utf8.parse('d7b85f6e214abcde')
 */
const KEY = CryptoJS.enc.Utf8.parse('GHYU80DV3465QSFG');

export const AES_Encrypt = (plaintext) => {
  let ciphertext = CryptoJS.AES.encrypt(plaintext, KEY, {
    mode: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7,
  }).toString();
  return ciphertext;
};

/**
 * AES 解密
 * @param jsonStr
 */
export const AES_Decrypt = (jsonStr) => {
  let plaintext = CryptoJS.AES.decrypt(jsonStr, KEY, {
    mode: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7,
  }).toString(CryptoJS.enc.Utf8);

  return plaintext;
};

const userKey = CryptoJS.enc.Utf8.parse('j8z&j*a$t{w#k}e@');

/**
 * 获取加密数据的明文
 * @param {string} jsonStr 加密的字符串
 * @returns 明文
 */
export const userDecrypt = (jsonStr) => {
  let plaintext = CryptoJS.AES.decrypt(jsonStr, userKey, {
    mode: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7,
  }).toString(CryptoJS.enc.Utf8);

  return plaintext;
};

const maskIdOrPhone = (input) => {
  // 匹配身份证号（18位）
  const idRegex = /^(\d{6})\d{8}(\d{4})$/;
  // 匹配手机号（中国大陆）
  const phoneRegex = /^(\d{3})\d{4}(\d{4})$/;
 
  // 根据正则表达式替换中间部分为星号
  if (idRegex.test(input)) {
    return input.replace(idRegex, '$1********$2');
  } else if (phoneRegex.test(input)) {
    return input.replace(phoneRegex, '$1****$2');
  }


  // if (input.indexOf('*') < 0) {
  //   // 如果不是身份证号或手机号，则对元数据进行处理

  // }

  return input; 
}



/**
 * 加密字符串解密为带有星号的数据
 * @param {string} jsonStr 加密的字符串
 */
export const userDecryptToAsterisk = (jsonStr) => {
  if (jsonStr.length <= 11) return jsonStr;

  const plaintext = userDecrypt(jsonStr);

  return maskIdOrPhone(plaintext);
};
