/**
 * 数据缓存工具
 * 使用localStorage实现基本的数据缓存功能
 */
export const CacheUtils = {
  /**
   * 设置缓存
   * @param key 缓存键
   * @param value 缓存值
   * @param expire 过期时间（毫秒）
   */
  set: <T>(key: string, value: T, expire?: number): void => {
    const data = {
      value,
      expire: expire ? Date.now() + expire : undefined,
    };
    localStorage.setItem(key, JSON.stringify(data));
  },

  /**
   * 获取缓存
   * @param key 缓存键
   * @returns 缓存值，如果不存在或已过期返回null
   */
  get: <T>(key: string): T | null => {
    const item = localStorage.getItem(key);
    if (!item) return null;

    try {
      const data = JSON.parse(item);
      if (data.expire && Date.now() > data.expire) {
        localStorage.removeItem(key);
        return null;
      }
      return data.value as T;
    } catch (error) {
      localStorage.removeItem(key);
      return null;
    }
  },

  /**
   * 删除缓存
   * @param key 缓存键
   */
  remove: (key: string): void => {
    localStorage.removeItem(key);
  },

  /**
   * 清空所有缓存
   */
  clear: (): void => {
    localStorage.clear();
  },

  /**
   * 检查缓存是否存在且未过期
   * @param key 缓存键
   * @returns 是否存在且未过期
   */
  has: (key: string): boolean => {
    return CacheUtils.get(key) !== null;
  },
};

export default CacheUtils;