// ============================================================
// model-cache — 模型列表加密本地缓存
//
// 策略：
//   - 应用启动时 initModelCache() 从加密 localStorage 恢复缓存
//   - getCachedModels() 同步读取（内存缓存，高频安全）
//   - setCachedModels() 异步加密写入（API 返回后更新）
//   - 降级：非 Electron 环境回退到 localStorage 明文
// ============================================================

import {initSafeStore, getSafeStore, setSafeStore} from '@/shared/utils/safe-storage';
import type {ModelsListResponseBody} from '@/modules/home/controllers/model-api';

/** 缓存键名（与 safe-storage 加密存储一致） */
const MODEL_CACHE_KEY = 'ele-heixiu-model-cache';

/**
 * 启动时初始化模型缓存：从 localStorage 解密到内存缓存。
 * 应在 AppProvider 挂载时调用（在 useModelList 首次使用之前）。
 */
export async function initModelCache(): Promise<void> {
    await initSafeStore(MODEL_CACHE_KEY);
}

/**
 * 同步读取缓存的模型列表（内存缓存，不触发 IPC）。
 * 返回 null 表示无缓存（需从 API 拉取）。
 */
export function getCachedModels(): ModelsListResponseBody[] | null {
    const raw = getSafeStore(MODEL_CACHE_KEY);
    if (!raw) return null;
    try {
        const parsed = JSON.parse(raw);
        if (Array.isArray(parsed)) return parsed as ModelsListResponseBody[];
        return null;
    } catch {
        return null;
    }
}

/**
 * 异步加密写入模型列表到 localStorage + 更新内存缓存。
 * API 返回后调用，best-effort（失败不抛异常，下次启动仍可用旧缓存）。
 */
export async function setCachedModels(models: ModelsListResponseBody[]): Promise<void> {
    try {
        await setSafeStore(MODEL_CACHE_KEY, JSON.stringify(models));
    } catch {
        // 写入失败静默，内存缓存已在 setSafeStore 内部更新
    }
}
