import { useState, useEffect } from 'react';

/**
 * Hook para gerenciar o tema do ambiente GR (Gestão de Risco)
 * Detecta a preferência do sistema e persiste a escolha do usuário no localStorage
 * 
 * @returns {{ isDarkMode: boolean, toggleTheme: () => void }}
 */
export const useGrTheme = () => {
    // Inicializa o tema verificando localStorage ou preferência do sistema
    const [isDarkMode, setIsDarkMode] = useState(() => {
        if (typeof window !== 'undefined' && window.localStorage) {
            const stored = localStorage.getItem('gr-theme');
            if (stored !== null) {
                return JSON.parse(stored);
            }
            // Se não houver preferência salva, usa a preferência do sistema
            return window.matchMedia('(prefers-color-scheme: dark)').matches;
        }
        return false; // Fallback para light mode
    });

    // Aplica o tema ao documento e salva no localStorage
    useEffect(() => {
        const root = window.document.documentElement;
        
        if (isDarkMode) {
            root.classList.add('dark');
        } else {
            root.classList.remove('dark');
        }
        
        // Salva a preferência no localStorage
        localStorage.setItem('gr-theme', JSON.stringify(isDarkMode));
    }, [isDarkMode]);

    // Listener para mudanças na preferência do sistema (apenas se não houver preferência salva)
    useEffect(() => {
        const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
        
        const handleChange = (e) => {
            // Só atualiza se não houver preferência salva pelo usuário
            const stored = localStorage.getItem('gr-theme');
            if (stored === null) {
                setIsDarkMode(e.matches);
            }
        };

        // Adiciona listener
        mediaQuery.addEventListener('change', handleChange);

        // Cleanup
        return () => {
            mediaQuery.removeEventListener('change', handleChange);
        };
    }, []);

    const toggleTheme = () => {
        setIsDarkMode(prev => !prev);
    };

    return { isDarkMode, toggleTheme };
};
