import { decodeJwtPayload, getAuthToken } from "./auth"; export type ThemeModePref = "system" | "light" | "dark"; export function getUserKeyFromToken(): string { const token = getAuthToken(); if (!token) return "anon"; const payload = decodeJwtPayload(token) ?? {}; const candidates = [ payload.sub, payload.nameid, payload["nameid"], payload["http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier"], payload["http://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid"], ]; for (const c of candidates) { if (typeof c === "string" && c.trim().length > 0) return c.trim(); } return "anon"; } function k(base: string) { return `${base}:${getUserKeyFromToken()}`; } export function getThemeModePref(): ThemeModePref { const raw = window.localStorage.getItem(k("themeMode")); if (raw === "light" || raw === "dark" || raw === "system") return raw; return "system"; } export function setThemeModePref(v: ThemeModePref) { window.localStorage.setItem(k("themeMode"), v); } export function getAccentColor(): string { const raw = window.localStorage.getItem(k("accentColor")); if (raw && /^#[0-9a-fA-F]{6}$/.test(raw)) return raw; return "#15803d"; } export function setAccentColor(v: string) { if (v && /^#[0-9a-fA-F]{6}$/.test(v)) window.localStorage.setItem(k("accentColor"), v); } export function clearAccentColor() { window.localStorage.removeItem(k("accentColor")); }