import { create } from 'zustand'; type Theme = 'light' | 'dark'; interface ThemeState { theme: Theme; toggle: () => void; setTheme: (theme: Theme) => void; } function getInitialTheme(): Theme { if (typeof window === 'undefined') return 'dark'; const saved = localStorage.getItem('theme') as Theme | null; if (saved) return saved; const params = new URLSearchParams(window.location.search); const forced = params.get('theme'); if (forced === 'dark' || forced === 'light') return forced; return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'; } export const useThemeStore = create((set, get) => ({ theme: getInitialTheme(), toggle: () => { const next = get().theme === 'dark' ? 'light' : 'dark'; get().setTheme(next); }, setTheme: (theme) => { localStorage.setItem('theme', theme); if (theme === 'dark') document.documentElement.classList.add('dark'); else document.documentElement.classList.remove('dark'); set({ theme }); }, })); // apply on load if (typeof window !== 'undefined') { if (getInitialTheme() === 'dark') document.documentElement.classList.add('dark'); else document.documentElement.classList.remove('dark'); }