'use client'; import { createContext, useCallback, useContext, useEffect, useState } from 'react'; type Theme = 'light' | 'dark'; interface ThemeContextValue { theme: Theme; toggleTheme: () => void; } const ThemeContext = createContext({ theme: 'light', toggleTheme: () => {}, }); export function useTheme() { return useContext(ThemeContext); } const STORAGE_KEY = 'goodgo-theme'; export function ThemeProvider({ children }: { children: React.ReactNode }) { const [theme, setTheme] = useState('light'); useEffect(() => { const stored = localStorage.getItem(STORAGE_KEY) as Theme | null; if (stored === 'dark' || stored === 'light') { setTheme(stored); document.documentElement.classList.toggle('dark', stored === 'dark'); } else if (window.matchMedia('(prefers-color-scheme: dark)').matches) { setTheme('dark'); document.documentElement.classList.add('dark'); } }, []); const toggleTheme = useCallback(() => { setTheme((prev) => { const next = prev === 'light' ? 'dark' : 'light'; localStorage.setItem(STORAGE_KEY, next); document.documentElement.classList.toggle('dark', next === 'dark'); return next; }); }, []); return ( {children} ); }