File size: 2,154 Bytes
65d68f5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import { getTuitionProfileRemote, saveTuitionProfileRemote } from "@/lib/api/tuition-profile";
import { defaultTuitionSetup, normalizeTuitionSetup, TUITION_SETUP_STORAGE_KEY, type TuitionSetup } from "./tuitionModel";

type StoredTuitionState = {
  setup?: Partial<TuitionSetup>;
  selectedSourceId?: string | null;
  completedTaskIds?: string[];
};

function parseStoredSetup(raw: string | null): Partial<TuitionSetup> | null {
  if (!raw) return null;
  try {
    const parsed = JSON.parse(raw) as StoredTuitionState | Partial<TuitionSetup>;
    if (parsed && typeof parsed === "object" && "setup" in parsed) {
      return (parsed as StoredTuitionState).setup ?? null;
    }
    return parsed as Partial<TuitionSetup>;
  } 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<TuitionSetup> {
  const local = readLocalTuitionSetup(fallback);
  const remote = await getTuitionProfileRemote();
  const setup = remote ?? local;
  writeLocalTuitionSetup(setup);
  return setup;
}

export async function persistTuitionSetup(setup: TuitionSetup): Promise<boolean> {
  writeLocalTuitionSetup(setup);
  return saveTuitionProfileRemote(setup);
}