/**
 * 产品数据缓存工具
 * 使用 localStorage 实现类似 SWR 的缓存功能
 */

/**
 * 缓存类型
 */

/**
 * 生成缓存键
 * @param osKey - OS 实例的唯一标识
 * @param cacheType - 缓存类型
 */
var generateCacheKey = function generateCacheKey(osKey) {
  var cacheType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'product';
  return "".concat(cacheType, "_cache_").concat(osKey);
};

/**
 * 通用缓存获取函数
 * @param osKey - OS 实例的唯一标识
 * @param cacheType - 缓存类型
 * @param maxAge - 缓存最大有效期（毫秒），默认不限制
 */
export var getCache = function getCache(osKey) {
  var cacheType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'product';
  var maxAge = arguments.length > 2 ? arguments[2] : undefined;
  try {
    var cacheKey = generateCacheKey(osKey, cacheType);
    var cacheStr = localStorage.getItem(cacheKey);
    if (!cacheStr) {
      return null;
    }
    var cache = JSON.parse(cacheStr);

    // 检查缓存是否过期
    if (maxAge && Date.now() - cache.timestamp > maxAge) {
      localStorage.removeItem(cacheKey);
      return null;
    }
    return cache.data;
  } catch (error) {
    console.error("Failed to get ".concat(cacheType, " cache:"), error);
    return null;
  }
};

/**
 * 从缓存中获取产品数据（兼容旧接口）
 * @param osKey - OS 实例的唯一标识
 * @param maxAge - 缓存最大有效期（毫秒），默认不限制
 */
export var getProductCache = function getProductCache(osKey, maxAge) {
  return getCache(osKey, 'product', maxAge);
};

/**
 * 通用缓存设置函数
 * @param osKey - OS 实例的唯一标识
 * @param data - 要缓存的数据
 * @param cacheType - 缓存类型
 */
export var setCache = function setCache(osKey, data) {
  var cacheType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'product';
  try {
    var cacheKey = generateCacheKey(osKey, cacheType);
    var cache = {
      data: data,
      timestamp: Date.now()
    };
    localStorage.setItem(cacheKey, JSON.stringify(cache));
  } catch (error) {
    console.error("Failed to set ".concat(cacheType, " cache:"), error);
  }
};

/**
 * 设置产品缓存数据（兼容旧接口）
 * @param osKey - OS 实例的唯一标识
 * @param data - 要缓存的数据
 */
export var setProductCache = function setProductCache(osKey, data) {
  setCache(osKey, data, 'product');
};

/**
 * 清除指定类型的缓存
 * @param osKey - OS 实例的唯一标识
 * @param cacheType - 缓存类型
 */
export var clearCache = function clearCache(osKey) {
  var cacheType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'product';
  try {
    var keys = Object.keys(localStorage);
    var prefix = "".concat(cacheType, "_cache_").concat(osKey);
    keys.forEach(function (key) {
      if (key.startsWith(prefix)) {
        localStorage.removeItem(key);
      }
    });
  } catch (error) {
    console.error("Failed to clear ".concat(cacheType, " cache:"), error);
  }
};

/**
 * 清除指定 osKey 的产品缓存（兼容旧接口）
 * @param osKey - OS 实例的唯一标识
 */
export var clearProductCache = function clearProductCache(osKey) {
  clearCache(osKey, 'product');
};

/**
 * 清除指定 osKey 的 BoardConfig 缓存
 * @param osKey - OS 实例的唯一标识
 */
export var clearBoardConfigCache = function clearBoardConfigCache(osKey) {
  clearCache(osKey, 'boardConfig');
};

/**
 * 清除指定 osKey 的所有类型缓存
 * @param osKey - OS 实例的唯一标识
 */
export var clearAllCacheByOsKey = function clearAllCacheByOsKey(osKey) {
  clearCache(osKey, 'product');
  clearCache(osKey, 'boardConfig');
};

/**
 * 清除所有产品缓存
 */
export var clearAllProductCache = function clearAllProductCache() {
  try {
    var keys = Object.keys(localStorage);
    var prefix = 'product_cache_';
    keys.forEach(function (key) {
      if (key.startsWith(prefix)) {
        localStorage.removeItem(key);
      }
    });
  } catch (error) {
    console.error('Failed to clear all product cache:', error);
  }
};

/**
 * 清除所有类型的缓存
 */
export var clearAllCache = function clearAllCache() {
  try {
    var keys = Object.keys(localStorage);
    var prefixes = ['product_cache_', 'boardConfig_cache_'];
    keys.forEach(function (key) {
      if (prefixes.some(function (prefix) {
        return key.startsWith(prefix);
      })) {
        localStorage.removeItem(key);
      }
    });
  } catch (error) {
    console.error('Failed to clear all cache:', error);
  }
};

/**
 * 获取 BoardConfig 缓存
 * @param osKey - OS 实例的唯一标识
 * @param maxAge - 缓存最大有效期（毫秒），默认不限制
 */
export var getBoardConfigCache = function getBoardConfigCache(osKey, maxAge) {
  return getCache(osKey, 'boardConfig', maxAge);
};

/**
 * 设置 BoardConfig 缓存
 * @param osKey - OS 实例的唯一标识
 * @param data - 要缓存的数据
 */
export var setBoardConfigCache = function setBoardConfigCache(osKey, data) {
  setCache(osKey, data, 'boardConfig');
};