import { createContext, useContext, useState, useEffect, useCallback } from 'react' type Theme = 'dark' | 'light' interface ThemeContextValue { theme: Theme toggleTheme: () => void isDark: boolean } const ThemeContext = createContext(null) function getInitialTheme(): Theme { if (typeof window === 'undefined') return 'dark' const stored = localStorage.getItem('cc-theme') if (stored === 'light' || stored === 'dark') return stored return window.matchMedia('(prefers-color-scheme: light)').matches ? 'light' : 'dark' } export function ThemeProvider({ children }: { children: React.ReactNode }) { const [theme, setTheme] = useState(getInitialTheme) useEffect(() => { const root = document.documentElement if (theme === 'dark') { root.classList.add('dark') root.classList.remove('light') } else { root.classList.add('light') root.classList.remove('dark') } localStorage.setItem('cc-theme', theme) }, [theme]) const toggleTheme = useCallback(() => { setTheme((prev) => (prev === 'dark' ? 'light' : 'dark')) }, []) return ( {children} ) } export function useTheme() { const ctx = useContext(ThemeContext) if (!ctx) throw new Error('useTheme must be used within ThemeProvider') return ctx }