"use client" import { ReactNode, createContext, useContext, useEffect, useState, } from "react" const COOKIE_NAME = "active_theme" const DEFAULT_THEME = "default" function setThemeCookie(theme: string) { if (typeof window === "undefined") return document.cookie = `${COOKIE_NAME}=${theme}; path=/; max-age=31536000; SameSite=Lax; ${window.location.protocol === "https:" ? "Secure;" : ""}` } type ThemeContextType = { activeTheme: string setActiveTheme: (theme: string) => void } const ThemeContext = createContext(undefined) export function ActiveThemeProvider({ children, initialTheme, }: { children: ReactNode initialTheme?: string }) { const [activeTheme, setActiveTheme] = useState( () => initialTheme || DEFAULT_THEME ) useEffect(() => { setThemeCookie(activeTheme) document.body.classList.forEach((className) => { if (className.startsWith("theme-")) { document.body.classList.remove(className) } }) document.body.classList.add(`theme-${activeTheme}`) }, [activeTheme]) return ( {children} ) } export function useThemeConfig() { const context = useContext(ThemeContext) if (context === undefined) { throw new Error("useThemeConfig must be used within an ActiveThemeProvider") } return context }