/**
 * API请求模块
 * 负责API接口调用和全局数据管理
 */
window.API = {
  // API端点URLs
  URLs: {
    jsonUrl: "https://aliexpress-freight-data.oss-cn-hangzhou.aliyuncs.com/all_shipping_data%20-%20v1.1.json",
    nationUrl: "https://aliexpress-freight-data.oss-cn-hangzhou.aliyuncs.com/nations.json",
    propertiesUrl: "https://aliexpress-freight-data.oss-cn-hangzhou.aliyuncs.com/properties.json"
  },

  // 全局共享数据存储
  globalData: {
    properties: null,
    shippingData: null,
    nationData: null,
    isInitialized: false,
    initializationPromise: null
  },

  /**
   * 初始化所有全局数据
   * @returns {Promise<boolean>} 初始化是否成功
   */
  async initialize() {
    // 如果已经初始化或者正在初始化，直接返回
    if (this.globalData.isInitialized) {
      console.log("API数据已初始化，无需重复初始化");
      return true;
    }
    
    if (this.globalData.initializationPromise) {
      return this.globalData.initializationPromise;
    }
    
    // 创建初始化Promise，避免并发重复初始化
    this.globalData.initializationPromise = new Promise(async (resolve) => {
      try {
        // 先获取properties
        const properties = await this.apiGetProperties();
        this.globalData.properties = properties;
        
        // 并行获取其他数据
        const [shippingData, nationData] = await Promise.all([
          this.apiGetShippingData(),
          this.apiGetNationData()
        ]);
        
        this.globalData.shippingData = shippingData;
        this.globalData.nationData = nationData;
        this.globalData.isInitialized = true;
        console.log("properties:", properties);
        console.log("shippingData:", shippingData);
        console.log("nationData:", nationData);
        
        console.log("API数据初始化成功");
        resolve(true);
      } catch (error) {
        console.error("API数据初始化失败：", error);
        this.globalData.isInitialized = false;
        resolve(false);
      }
    });
    
    return this.globalData.initializationPromise;
  },

  /**
   * 获取属性数据
   * @returns {Promise<Object>} 属性数据
   */
  async apiGetProperties() {
    try {
      const response = await fetch(this.URLs.propertiesUrl);
      if (!response.ok) {
        throw new Error(`请求失败，状态码：${response.status}`);
      }
      return await response.json();
    } catch (error) {
      console.error("获取属性数据时出错：", error);
      throw error;
    }
  },

  /**
   * 获取邮费数据
   * @returns {Promise<Object>} 邮费数据
   */
  async apiGetShippingData() {
    try {
      const response = await fetch(this.URLs.jsonUrl);
      if (!response.ok) {
        throw new Error(`请求失败，状态码：${response.status}`);
      }
      return await response.json();
    } catch (error) {
      console.error("获取邮费数据时出错：", error);
      throw error;
    }
  },

  /**
   * 获取国家列表数据
   * @returns {Promise<Object>} 国家列表数据
   */
  async apiGetNationData() {
    try {
      const response = await fetch(this.URLs.nationUrl);
      if (!response.ok) {
        throw new Error(`请求失败，状态码：${response.status}`);
      }
      return await response.json();
    } catch (error) {
      console.error("获取国家数据时出错：", error);
      throw error;
    }
  },

  /**
   * 获取全局属性数据
   * @returns {Object|null} 属性数据或null
   */
  getGlobalProperties() {
    return Object.assign([], this.globalData.properties);
  },

  /**
   * 获取全局邮费数据
   * @returns {Object|null} 邮费数据或null
   */
  getGlobalShippingData() {
    return Object.assign([], this.globalData.shippingData);
  },

  /**
   * 获取全局国家数据
   * @returns {Object|null} 国家数据或null
   */
  getGlobalNationData() {
    return Object.assign([], this.globalData.nationData);
  },

  /**
   * 获取全局物流数据
   * @returns {Object|null} 物流数据
   */
  getGlobalLogisticsData() {

    let logisticsData = [
      {
        name: "菜鸟无忧物流-标准",
        code: "ordinary"
      },
      {
        name: "菜鸟特货专线－标准",
        code: "pecial"
      },
    ];
    return logisticsData;
  },

  

  /**
   * 检查数据是否已初始化
   * @returns {boolean} 是否已初始化
   */
  isDataInitialized() {
    return this.globalData.isInitialized;
  },

  /**
   * 重置全局数据（用于调试或重新加载）
   */
  resetData() {
    this.globalData = {
      properties: null,
      shippingData: null,
      nationData: null,
      isInitialized: false,
      initializationPromise: null
    };
    console.log("API全局数据已重置");
  }
};

// 确保window.API已定义
if (!window.API) {
  window.API = {};
}

// 页面加载完成后自动初始化API数据
(function() {
  // 等待DOM加载完成
  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', async () => {
      try {
        await window.API.initialize();
        console.log('API数据已自动初始化完成，其他文件可以直接调用数据');
      } catch (error) {
        console.error('API自动初始化失败：', error);
      }
    });
  } else {
    // DOM已经加载完成，直接初始化
    window.API.initialize().then(() => {
      console.log('API数据已自动初始化完成，其他文件可以直接调用数据');
    }).catch(error => {
      console.error('API自动初始化失败：', error);
    });
  }
})();