"use client"; import { useEffect, useState } from "react"; import { resolveTheme, type Theme, type Mode } from "@/lib/themes"; const STORAGE_KEY = "app-theme"; interface Stored { theme?: Theme; mode?: Mode; } export function useTheme() { const [theme, setThemeState] = useState("humdrum"); const [mode, setModeState] = useState("auto"); // hydrate from localStorage useEffect(() => { try { const raw = localStorage.getItem(STORAGE_KEY); if (raw) { const parsed = JSON.parse(raw) as Stored; if (parsed.theme) setThemeState(parsed.theme); if (parsed.mode) setModeState(parsed.mode); } } catch {} }, []); // apply whenever theme or mode change useEffect(() => { const applied = resolveTheme(theme, mode); document.documentElement.dataset.theme = applied; try { localStorage.setItem(STORAGE_KEY, JSON.stringify({ theme, mode })); document.cookie = `app-theme=${applied}; Path=/; Max-Age=31536000; SameSite=Lax`; } catch {} }, [theme, mode]); // react to system preference changes if mode === "auto" useEffect(() => { if (mode !== "auto") return; const mql = window.matchMedia("(prefers-color-scheme: dark)"); const handler = () => { document.documentElement.dataset.theme = resolveTheme(theme, "auto"); }; mql.addEventListener("change", handler); return () => mql.removeEventListener("change", handler); }, [theme, mode]); return { theme, mode, setTheme: setThemeState, setMode: setModeState, }; }