import { getTuitionProfileRemote, saveTuitionProfileRemote } from "@/lib/api/tuition-profile"; import { defaultTuitionSetup, normalizeTuitionSetup, TUITION_SETUP_STORAGE_KEY, type TuitionSetup } from "./tuitionModel"; type StoredTuitionState = { setup?: Partial; selectedSourceId?: string | null; completedTaskIds?: string[]; }; function parseStoredSetup(raw: string | null): Partial | null { if (!raw) return null; try { const parsed = JSON.parse(raw) as StoredTuitionState | Partial; if (parsed && typeof parsed === "object" && "setup" in parsed) { return (parsed as StoredTuitionState).setup ?? null; } return parsed as Partial; } catch { return null; } } export function readLocalTuitionSetup(fallback: TuitionSetup = defaultTuitionSetup): TuitionSetup { if (typeof window === "undefined") return normalizeTuitionSetup(null, fallback); const stored = parseStoredSetup(window.localStorage.getItem(TUITION_SETUP_STORAGE_KEY)); return normalizeTuitionSetup(stored, fallback); } export function writeLocalTuitionSetup(setup: TuitionSetup): void { if (typeof window === "undefined") return; try { const raw = window.localStorage.getItem(TUITION_SETUP_STORAGE_KEY); const existing = raw ? (JSON.parse(raw) as StoredTuitionState | TuitionSetup) : null; const next = existing && typeof existing === "object" && "setup" in existing ? { ...existing, setup } : { setup }; window.localStorage.setItem(TUITION_SETUP_STORAGE_KEY, JSON.stringify(next)); } catch { window.localStorage.setItem(TUITION_SETUP_STORAGE_KEY, JSON.stringify({ setup })); } } export async function hydrateTuitionSetup(fallback: TuitionSetup = defaultTuitionSetup): Promise { const local = readLocalTuitionSetup(fallback); const remote = await getTuitionProfileRemote(); const setup = remote ?? local; writeLocalTuitionSetup(setup); return setup; } export async function persistTuitionSetup(setup: TuitionSetup): Promise { writeLocalTuitionSetup(setup); return saveTuitionProfileRemote(setup); }