'use client'; import { create } from 'zustand'; import { loadServerData, saveServerData } from '@/lib/server-data'; import { mergeDailySnapshotCacheForSave, mergeInsightCacheForSave, upsertDailySnapshot, upsertInsight, type XiaobaoRiskInsightCacheItem, } from '@/lib/xiaobao-risk-cache'; import type { XiaobaoRiskSnapshot } from '@/lib/xiaobao-risk-trend'; interface XiaobaoRiskState { snapshots: XiaobaoRiskSnapshot[]; insights: XiaobaoRiskInsightCacheItem[]; error?: string; fetchRiskData: () => Promise; saveSnapshot: (item: XiaobaoRiskSnapshot) => Promise; saveInsight: (item: XiaobaoRiskInsightCacheItem) => Promise; } async function loadSnapshots(): Promise { try { const rows = await loadServerData('xiaobao-risk-snapshots'); return Array.isArray(rows) ? rows : []; } catch {} return null; } async function loadInsights(): Promise { try { const rows = await loadServerData('xiaobao-risk-insights'); return Array.isArray(rows) ? rows : []; } catch {} return null; } export const useXiaobaoRiskStore = create((set, get) => ({ snapshots: [], insights: [], error: undefined, fetchRiskData: async () => { const [snapshots, insights] = await Promise.all([loadSnapshots(), loadInsights()]); set({ ...(snapshots ? { snapshots } : {}), ...(insights ? { insights } : {}), error: snapshots === null || insights === null ? '小宝预警缓存加载失败' : undefined, }); }, saveSnapshot: async (item) => { const optimistic = upsertDailySnapshot(get().snapshots, item); set({ snapshots: optimistic, error: undefined }); try { const remote = await loadServerData('xiaobao-risk-snapshots'); const snapshots = mergeDailySnapshotCacheForSave(optimistic, Array.isArray(remote) ? remote : [], item); set({ snapshots, error: undefined }); await saveServerData('xiaobao-risk-snapshots', snapshots); } catch (error) { set({ error: '小宝预警快照保存失败' }); throw error; } }, saveInsight: async (item) => { const optimistic = upsertInsight(get().insights, item); set({ insights: optimistic, error: undefined }); try { const remote = await loadServerData('xiaobao-risk-insights'); const insights = mergeInsightCacheForSave(optimistic, Array.isArray(remote) ? remote : [], item); set({ insights, error: undefined }); await saveServerData('xiaobao-risk-insights', insights); } catch (error) { set({ error: '小宝预警解读保存失败' }); throw error; } }, }));