import { browser } from "$app/environment"; import { listAccounts } from "$lib/api/endpoints"; import type { Account } from "$lib/api/types"; const STORAGE_KEY = "bg.account"; function readSelected(): number | null { if (!browser) { return null; } const stored = localStorage.getItem(STORAGE_KEY); return stored === null ? null : Number(stored); } function createAccounts() { let list = $state([]); let selectedId = $state(readSelected()); let loaded = $state(false); const selected = $derived( list.find((account) => account.account_id === selectedId) ?? null ); function persist(id: number | null) { if (!browser) { return; } if (id === null) { localStorage.removeItem(STORAGE_KEY); } else { localStorage.setItem(STORAGE_KEY, String(id)); } } return { get list() { return list; }, get selectedId() { return selectedId; }, get selected() { return selected; }, get loaded() { return loaded; }, async load() { list = await listAccounts(); loaded = true; const exists = list.some((account) => account.account_id === selectedId); if (!exists) { const fallback = list.find((account) => account.is_active) ?? list.at(0) ?? null; selectedId = fallback ? fallback.account_id : null; persist(selectedId); } }, select(id: number) { selectedId = id; persist(id); }, }; } export const accounts = createAccounts();