"use client"; import { createContext, useContext, useEffect, useState, ReactNode } from "react"; type Theme = "dark" | "dark-cyan"; interface ThemeContextType { theme: Theme; setTheme: (theme: Theme) => void; toggleTheme: () => void; } const ThemeContext = createContext(undefined); interface ThemeProviderProps { children: ReactNode; initialTheme?: Theme; } export function ThemeProvider({ children, initialTheme = "dark-cyan" }: ThemeProviderProps) { const [theme, setThemeState] = useState(initialTheme); const [mounted, setMounted] = useState(false); useEffect(() => { setMounted(true); // Apply theme class to document element document.documentElement.className = theme; }, [theme]); useEffect(() => { if (mounted) { // Load theme from localStorage if available const savedTheme = localStorage.getItem("theme") as Theme | null; if (savedTheme && (savedTheme === "dark" || savedTheme === "dark-cyan")) { setThemeState(savedTheme); document.documentElement.className = savedTheme; } } }, [mounted]); const setTheme = (newTheme: Theme) => { setThemeState(newTheme); document.documentElement.className = newTheme; localStorage.setItem("theme", newTheme); }; const toggleTheme = () => { const newTheme = theme === "dark" ? "dark-cyan" : "dark"; setTheme(newTheme); }; return ( {children} ); } export function useTheme() { const context = useContext(ThemeContext); if (context === undefined) { throw new Error("useTheme must be used within a ThemeProvider"); } return context; }