/**
 * useLocalCache.ts — 离线模式本地缓存工具（P3-1）
 *
 * 5 分钟过期，localStorage 存储。
 * 首次加载后写入缓存，过期自动刷新，不过期不请求 API。
 */

const CACHE_PREFIX = 'offline_cache_'
const DEFAULT_TTL = 5 * 60 * 1000 // 5 分钟

interface CacheEntry<T> {
  data: T
  timestamp: number
  ttl: number
}

export function getLocalCache<T>(key: string): T | null {
  try {
    const raw = localStorage.getItem(CACHE_PREFIX + key)
    if (!raw) return null
    const entry: CacheEntry<T> = JSON.parse(raw)
    if (Date.now() - entry.timestamp > entry.ttl) {
      localStorage.removeItem(CACHE_PREFIX + key)
      return null
    }
    return entry.data
  } catch {
    return null
  }
}

export function setLocalCache<T>(key: string, data: T, ttl: number = DEFAULT_TTL): void {
  try {
    const entry: CacheEntry<T> = { data, timestamp: Date.now(), ttl }
    localStorage.setItem(CACHE_PREFIX + key, JSON.stringify(entry))
  } catch {
    // localStorage 满或不可用时静默失败，不影响功能
  }
}