import { createContext, useContext, useState, useEffect, ReactNode } from "react"; type Theme = "light" | "dark"; type ThemeContextType = { theme: Theme; toggleTheme: () => void; }; const ThemeContext = createContext(undefined); export const ThemeProvider = ({ children }: { children: ReactNode }) => { const [theme, setTheme] = useState(null); // null = tema ainda não carregado useEffect(() => { const storedTheme = localStorage.getItem("theme") as Theme | null; const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches; const initialTheme = storedTheme ?? (prefersDark ? "dark" : "light"); setTheme(initialTheme); }, []); useEffect(() => { if (theme === null) return; // ainda a carregar const root = document.documentElement; root.classList.remove("light", "dark"); root.classList.add(theme); localStorage.setItem("theme", theme); }, [theme]); const toggleTheme = () => { setTheme((prev) => { const nextTheme = prev === "dark" ? "light" : "dark"; console.log("ToggleTheme:", prev, "->", nextTheme); return nextTheme; }); //setTheme((prev) => (prev === "dark" ? "light" : "dark")); }; // Enquanto tema não carregou, não renderiza nada if (theme === null) return null; return ( {children} ); }; export const useTheme = (): ThemeContextType => { const context = useContext(ThemeContext); if (!context) throw new Error("useTheme must be used within ThemeProvider"); return context; };