'use client';

import { useEffect, useState } from 'react';
import { getUser } from '@/lib/auth';

export function FaviconUpdater() {
    const [mounted, setMounted] = useState(false);

    useEffect(() => {
        setMounted(true);
    }, []);

    useEffect(() => {
        if (!mounted) return;

        const updateFavicon = () => {
            const user = getUser();
            if (user?.logoUrl) {
                // Usar requestAnimationFrame para garantir que o DOM esteja estável após hidratação
                requestAnimationFrame(() => {
                    const link: HTMLLinkElement = document.querySelector("link[rel*='icon']") || document.createElement('link');
                    link.type = 'image/x-icon';
                    link.rel = 'shortcut icon';
                    link.href = user.logoUrl!;
                    if (!link.parentNode) {
                        document.getElementsByTagName('head')[0].appendChild(link);
                    }
                });
            }
        };

        // Atraso pequeno para garantir que a hidratação terminou
        const timer = setTimeout(() => {
            updateFavicon();
        }, 0);

        // Ouve mudanças no localStorage
        const handleStorage = () => {
            requestAnimationFrame(() => updateFavicon());
        };
        window.addEventListener('storage', handleStorage);

        // Custom event para atualização interna na mesma aba
        window.addEventListener('auth-update', handleStorage);

        return () => {
            clearTimeout(timer);
            window.removeEventListener('storage', handleStorage);
            window.removeEventListener('auth-update', handleStorage);
        };
    }, [mounted]);

    return null;
}
