'use client'; import { createContext, useContext, useEffect, useState, useCallback } from 'react'; type Theme = 'light' | 'dark'; const ThemeContext = createContext<{ theme: Theme; toggleTheme: () => void; }>({ theme: 'light', toggleTheme: () => {}, }); export function useThemeContext() { return useContext(ThemeContext); } export function ThemeProvider({ children }: { children: React.ReactNode }) { const [theme, setTheme] = useState('light'); const [mounted, setMounted] = useState(false); useEffect(() => { const stored = localStorage.getItem('bitforum-theme') as Theme | null; const initial = stored ?? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'); setTheme(initial); document.documentElement.classList.toggle('dark', initial === 'dark'); setMounted(true); }, []); const toggleTheme = useCallback(() => { setTheme((prev) => { const next = prev === 'light' ? 'dark' : 'light'; localStorage.setItem('bitforum-theme', next); document.documentElement.classList.toggle('dark', next === 'dark'); return next; }); }, []); if (!mounted) { return <>{children}; } return ( {children} ); }