import { createContext, useContext, useEffect, useState, type ReactNode } from "react"; export type Theme = "dark" | "light"; const STORAGE_KEY = "ui_theme"; function detectInitialTheme(): Theme { const stored = localStorage.getItem(STORAGE_KEY); if (stored === "dark" || stored === "light") return stored; return window.matchMedia?.("(prefers-color-scheme: light)").matches ? "light" : "dark"; } interface ThemeContextValue { theme: Theme; toggleTheme: () => void; } const ThemeContext = createContext(undefined); export function ThemeProvider({ children }: { children: ReactNode }) { const [theme, setTheme] = useState(detectInitialTheme); useEffect(() => { document.documentElement.dataset.theme = theme; localStorage.setItem(STORAGE_KEY, theme); }, [theme]); function toggleTheme() { setTheme((current) => (current === "dark" ? "light" : "dark")); } return {children}; } export function useTheme(): ThemeContextValue { const ctx = useContext(ThemeContext); if (!ctx) throw new Error("useTheme must be used within a ThemeProvider"); return ctx; }