/**
 * 简单的参数加密/解密工具
 */

// 密钥（在实际项目中，应该从环境变量或配置文件中获取）
const SECRET_KEY = 'gxt_secret_key_2025';

/**
 * 简单加密函数
 * @param {string} str 需要加密的字符串
 * @returns {string} 加密后的字符串
 */
export function encrypt(str) {
  // 使用 btoa 进行 base64 编码
  const encoded = btoa(unescape(encodeURIComponent(str)));
  
  // 简单的异或加密
  let encrypted = '';
  for (let i = 0; i < encoded.length; i++) {
    encrypted += String.fromCharCode(encoded.charCodeAt(i) ^ SECRET_KEY.charCodeAt(i % SECRET_KEY.length));
  }
  
  // 再次进行 base64 编码以避免特殊字符
  return btoa(encrypted);
}

/**
 * 简单解密函数
 * @param {string} str 需要解密的字符串
 * @returns {string} 解密后的字符串
 */
export function decrypt(str) {
  try {
    // 先进行 base64 解码
    const decoded = atob(str);
    
    // 简单的异或解密
    let decrypted = '';
    for (let i = 0; i < decoded.length; i++) {
      decrypted += String.fromCharCode(decoded.charCodeAt(i) ^ SECRET_KEY.charCodeAt(i % SECRET_KEY.length));
    }
    
    // 再次进行 base64 解码
    return decodeURIComponent(escape(atob(decrypted)));
  } catch (e) {
    console.error('解密失败:', e);
    return '';
  }
}

/**
 * 加密路由参数
 * @param {Object} params 路由参数对象
 * @returns {string} 加密后的参数字符串
 */
export function encryptParams(params) {
  const paramString = JSON.stringify(params);
  return encrypt(paramString);
}

/**
 * 解密路由参数
 * @param {string} encryptedParams 加密的参数字符串
 * @returns {Object} 解密后的参数对象
 */
export function decryptParams(encryptedParams) {
  try {
    const paramString = decrypt(encryptedParams);
    return JSON.parse(paramString);
  } catch (e) {
    console.error('解密参数失败:', e);
    return {};
  }
}