/**
 * 定价工具本地存储工具类（全局变量版本）
 */
window.PricingStorage = {
  // 默认定价数据（移除异步初始化的exchangeRate）
  DEFAULT_PRICING: {
    cost: 0,
    discount: 0,
    shopDiscount: 0,
    platformCommission: 0,
    allianceCommission: 0,
    transactionFee: 0,
    coinMarketing: 0,
    activityDiscount: 0,
    profitRatio: 0,
    recommendedPrice: 0,//商品售价
    currency: "USD",
    exchangeRate: 7, // 暂时设为null，后续通过异步方法初始化
  },

  /**
   * 获取汇率（优化为纯async/await风格）
   * @param {string} country - 基准货币代码（如USD、CNY）
   * @returns {Promise<Object|null>} 汇率对象或null
   */
  async getRate(country) {
    try {
      const url = `https://api.frankfurter.app/latest?base=${country}`;
      const response = await fetch(url);
      
      if (!response.ok) {
        throw new Error(`HTTP错误，状态码：${response.status}`);
      }
      
      const data = await response.json();
      console.log('汇率请求成功：', data.rates);
      return data.rates; // 直接返回rates对象
    } catch (error) {
      console.error('汇率请求失败：', error.message);
      return null; // 出错时返回null
    }
  },

  /**
   * 获取定价数据（确保汇率正确初始化）
   * @returns {Promise<Object>} 合并后的定价数据
   */
  async getPricingData() {
    return new Promise((resolve) => {
      chrome.storage.local.get("pricing", async (result) => {
        const storedData = result.pricing || {};
        // 合并默认数据和存储数据
        const mergedData = { ...this.DEFAULT_PRICING, ...storedData };
        
        // 如果汇率未初始化，自动获取
        if (!mergedData.exchangeRate) {
          mergedData.exchangeRate = await this.getRate(mergedData.currency);
        }
        
        resolve(mergedData);
      });
    });
  },

  /**
   * 保存定价数据（仅保存默认数据中包含的字段）
   * @param {Object} data - 要保存的定价数据
   * @returns {Promise<void>}
   */
  async savePricingData(data) {
    return new Promise((resolve) => {
      // 过滤掉不在默认数据中的字段，确保数据结构一致
      const validData = Object.fromEntries(
        Object.entries(data).filter(([key]) => Object.keys(this.DEFAULT_PRICING).includes(key))
      );
      chrome.storage.local.set({ pricing: validData }, resolve);
    });
  }
};

// 初始化时预加载汇率（修正后）
// (async () => {
//   // 1. 优先执行：此IIFE在脚本加载时立即执行，且无其他代码阻塞
//   console.log('开始预加载汇率...');
//   const initialData = await window.PricingStorage.getPricingData();
  
//   // 2. 仅在汇率未初始化时请求（恢复判断，避免重复请求）
//   // if (!initialData.exchangeRate) {
//     console.log('首次使用，正在初始化汇率数据...');
//     // 修正：先await获取汇率对象，再访问CNY属性
//     const rates = await window.PricingStorage.getRate(initialData.currency);
//     window.setTimeout( async ()=>{
//           console.log("美元兑换人民币汇率：", rates.CNY);
//           const cnyRate = rates?.CNY; // 用可选链避免rates为null时报错
          
//           if (cnyRate) {
//             await window.PricingStorage.savePricingData({ 
//               ...initialData, 
//               exchangeRate: parseFloat(cnyRate.toFixed(2)) // 保留两位小数
//             });
//             console.log('汇率初始化成功并保存');
//           } else {
//             console.warn('未获取到有效的CNY汇率');
//           }

//     }, 200);

//   // } else {
//   //   console.log('汇率已存在，无需初始化');
//   // }
// })();

// 初始化时预加载汇率（修正后）
(async () => {
  // 1. 优先执行：此IIFE在脚本加载时立即执行，且无其他代码阻塞
  console.log('开始预加载汇率...');
  const initialData = await window.PricingStorage.getPricingData();
  
  // 2. 仅在汇率未初始化时请求（恢复判断，避免重复请求）
  // if (!initialData.exchangeRate) {
    console.log('首次使用，正在初始化汇率数据...');
    // 修正：先await获取汇率对象，再访问CNY属性
    const rates = await window.PricingStorage.getRate(initialData.currency);
    const cnyRate = rates?.CNY; // 用可选链避免rates为null时报错
    console.log("美元兑换人民币汇率：", rates.CNY);
    if (cnyRate) {
      await window.PricingStorage.savePricingData({ 
        ...initialData, 
        exchangeRate: parseFloat(cnyRate.toFixed(2)) // 保留两位小数
      });
      console.log('汇率初始化成功并保存');
    } else {
      console.warn('未获取到有效的CNY汇率');
    }
  // } else {
  //   console.log('汇率已存在，无需初始化');
  // }
})();