// 引入 CryptoJS 库
// CryptoJS 是一个流行的 JavaScript 加密库，提供多种加密算法，
// 包括 AES（高级加密标准）。它允许开发者在客户端对数据进行加密和解密。
import CryptoJS from 'crypto-js';

// 定义用于加密和解密的密钥
// keyStr 是一个固定的字符串，作为加密和解密时使用的密钥。
// 注意：在实际应用中，应确保密钥的安全性，避免硬编码或泄露。
const keyStr = '-mall4j-password'; // 解密用的key

/**
 * 加密函数
 * @param {string} word - 需要加密的明文字符串
 * @returns {string} - 返回经过 AES 加密后的密文字符串
 */
export function encrypt(word) {
  // 获取当前时间戳，用于生成唯一的加密内容前缀
  // 这有助于防止相同的明文产生相同的密文，增加了安全性。
  const time = Date.now();

  // 将密钥字符串转换为字节数组 (WordArray)，以便用于加密操作
  // 使用 Utf8 编码来解析密钥字符串，确保正确处理非ASCII字符。
  const key = CryptoJS.enc.Utf8.parse(keyStr);

  // 将时间戳与需要加密的文本连接起来，并将其转换为字节数组
  // 同样使用 Utf8 编码来解析字符串，以确保正确处理所有字符。
  const srcs = CryptoJS.enc.Utf8.parse(time + word); // 加密方式: 时间戳 + 密文

  // 使用 AES 算法进行加密
  // mode: ECB 表示使用电子密码本模式，这是一种简单的加密模式，但不适合加密大量数据或要求高安全性的场景。
  // padding: Pkcs7 表示使用 PKCS#7 填充方案，这是AES加密推荐的填充方式。
  const encrypted = CryptoJS.AES.encrypt(srcs, key, {
    mode: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7
  });

  // 将加密后的结果转换为 Base64 字符串返回
  // 这样可以方便地在网络上传输或存储加密数据。
  return encrypted.toString();
}
