// 缓存相关常量
const CACHE_PREFIX = 'API_CACHE_'
const CACHE_EXPIRE_TIME = 5 * 60 * 1000 // 默认缓存时间5分钟

/**
 * 获取缓存数据
 * @param {string} key - 缓存键名
 * @returns {any} 缓存数据（过期返回null）
 */
export const getCache = (key) => {
  try {
    const cacheData = uni.getStorageSync(CACHE_PREFIX + key)
    if (cacheData && cacheData.expireTime && Date.now() < cacheData.expireTime) {
      return cacheData.data
    }
    // 缓存过期，清除
    uni.removeStorageSync(CACHE_PREFIX + key)
    return null
  } catch (e) {
    console.error('获取缓存失败:', e)
    return null
  }
}

/**
 * 设置缓存数据
 * @param {string} key - 缓存键名
 * @param {any} data - 要缓存的数据
 * @param {number} expireTime - 过期时间（毫秒），默认5分钟
 */
export const setCache = (key, data, expireTime = CACHE_EXPIRE_TIME) => {
  try {
    const cacheData = {
      data: data,
      expireTime: Date.now() + expireTime
    }
    uni.setStorageSync(CACHE_PREFIX + key, cacheData)
  } catch (e) {
    console.error('设置缓存失败:', e)
  }
}

/**
 * 清除指定缓存
 * @param {string} key - 缓存键名
 */
export const clearCache = (key) => {
  try {
    uni.removeStorageSync(CACHE_PREFIX + key)
  } catch (e) {
    console.error('清除缓存失败:', e)
  }
}

/**
 * 清除所有API缓存
 */
export const clearAllCache = () => {
  try {
    const keys = uni.getStorageInfoSync().keys || []
    for (const key of keys) {
      if (key.startsWith(CACHE_PREFIX)) {
        uni.removeStorageSync(key)
      }
    }
  } catch (e) {
    console.error('清除所有缓存失败:', e)
  }
}

/**
 * 生成请求缓存键名
 * @param {string} url - 请求URL
 * @param {object} data - 请求参数
 * @param {string} method - 请求方法
 * @returns {string} 缓存键名
 */
export const generateCacheKey = (url, data, method) => {
  const params = JSON.stringify(data || {})
  return `${method}_${url}_${params}`
}

export default {
  getCache,
  setCache,
  clearCache,
  clearAllCache,
  generateCacheKey
}