import { useState, useEffect, createContext, useContext } from "react"; // Créer un contexte pour le thème const ThemeModeContext = createContext(); // Provider pour le contexte du thème export const ThemeModeProvider = ({ children }) => { // Get system preference const getSystemPreference = () => { return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; }; // Essayer de récupérer le mode depuis localStorage ou utiliser la préférence système const getSavedTheme = () => { const savedTheme = localStorage.getItem("theme-mode"); return savedTheme || getSystemPreference(); }; // Initialize theme mode from saved or system preference const [mode, setMode] = useState(getSavedTheme); // Listen to system preference changes if no saved preference useEffect(() => { const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)"); const handleChange = (e) => { // Only change if no user preference is saved if (!localStorage.getItem("theme-mode")) { setMode(e.matches ? "dark" : "light"); } }; mediaQuery.addEventListener("change", handleChange); return () => mediaQuery.removeEventListener("change", handleChange); }, []); // Save theme preference to localStorage when it changes useEffect(() => { localStorage.setItem("theme-mode", mode); }, [mode]); const toggleTheme = () => { setMode((prevMode) => (prevMode === "light" ? "dark" : "light")); }; return ( {children} ); }; // Hook pour utiliser le contexte du thème export const useThemeMode = () => { const context = useContext(ThemeModeContext); if (context === undefined) { throw new Error("useThemeMode must be used within a ThemeModeProvider"); } return context; };