'use client' import { createContext, useContext, useState, useEffect, type ReactNode } from 'react' type Theme = 'light' | 'dark' interface ThemeContextValue { theme: Theme toggleTheme: () => void setTheme: (theme: Theme) => void } const ThemeContext = createContext(null) export function ThemeProvider({ children }: { children: ReactNode }) { const [theme, setThemeState] = useState(() => { // Check localStorage first const stored = localStorage.getItem('theme') as Theme | null if (stored === 'light' || stored === 'dark') return stored // Fall back to system preference if (typeof window !== 'undefined' && window.matchMedia('(prefers-color-scheme: light)').matches) { return 'light' } return 'dark' }) useEffect(() => { // Update document class and localStorage when theme changes document.documentElement.classList.remove('light', 'dark') document.documentElement.classList.add(theme) localStorage.setItem('theme', theme) }, [theme]) const toggleTheme = () => { setThemeState(prev => prev === 'dark' ? 'light' : 'dark') } const setTheme = (newTheme: Theme) => { setThemeState(newTheme) } return ( {children} ) } export function useTheme() { const context = useContext(ThemeContext) if (!context) { throw new Error('useTheme must be used within a ThemeProvider') } return context }