import { createContext, useCallback, useContext, useEffect, useState } from "react"; type Theme = "light" | "dark"; const STORAGE_KEY = "fabro-theme"; function getInitialTheme(): Theme { if (typeof window === "undefined") return "dark"; const stored = localStorage.getItem(STORAGE_KEY); if (stored === "light" || stored === "dark") return stored; return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; } function applyThemeClass(theme: Theme) { const root = document.documentElement; root.classList.remove("light", "dark"); root.classList.add(theme); } const ThemeContext = createContext<{ theme: Theme; toggle: () => void; }>({ theme: "dark", toggle: () => {} }); export function ThemeProvider({ children }: { children: React.ReactNode }) { const [theme, setTheme] = useState(getInitialTheme); useEffect(() => { applyThemeClass(theme); }, [theme]); const toggle = useCallback(() => { setTheme((prev) => { const next = prev === "dark" ? "light" : "dark"; localStorage.setItem(STORAGE_KEY, next); return next; }); }, []); return ( {children} ); } export function useTheme() { return useContext(ThemeContext); } export type { Theme };