/**
 * UTM Parameters Manager - Gado Nobre
 * Captura, armazena e repassa parâmetros UTM do Facebook até o checkout
 */

class UTMParamsManager {
    constructor() {
        this.utmParams = [
            'utm_source',
            'utm_campaign', 
            'utm_medium',
            'utm_content',
            'utm_term',
            'utm_id',
            'fbclid',
            'gclid',
            'src',
            'sck'
        ];
        
        this.init();
    }

    /**
     * Inicializa o sistema de captura de UTMs
     */
    init() {
        console.log('🚀 UTM Parameters Manager iniciado');
        
        // Captura UTMs na primeira visita
        this.captureUTMParams();
        
        // Atualiza links de checkout com UTMs
        this.updateCheckoutLinks();
        
        // Rastreia navegação entre páginas
        this.trackPageNavigation();
        
        // Debug: mostra UTMs capturados
        this.debugUTMs();
    }

    /**
     * Captura parâmetros UTM da URL atual
     */
    captureUTMParams() {
        const urlParams = new URLSearchParams(window.location.search);
        const utmData = {};
        let hasNewParams = false;

        // Captura todos os parâmetros UTM
        this.utmParams.forEach(param => {
            const value = urlParams.get(param);
            if (value) {
                utmData[param] = value;
                hasNewParams = true;
            }
        });

        // Se encontrou novos parâmetros, salva no localStorage
        if (hasNewParams) {
            const existingUTMs = this.getStoredUTMs();
            const mergedUTMs = { ...existingUTMs, ...utmData };
            
            localStorage.setItem('gadonobre_utm_params', JSON.stringify(mergedUTMs));
            localStorage.setItem('gadonobre_utm_timestamp', Date.now().toString());
            
            console.log('✅ UTM Parameters capturados e salvos:', mergedUTMs);
        } else {
            // Se não há novos UTMs na URL, verifica se já temos UTMs salvos
            const existingUTMs = this.getStoredUTMs();
            if (Object.keys(existingUTMs).length === 0) {
                console.log('ℹ️ Nenhum parâmetro UTM encontrado na URL atual');
            } else {
                console.log('ℹ️ Usando UTMs salvos anteriormente:', existingUTMs);
            }
        }
    }

    /**
     * Recupera UTMs salvos no localStorage
     */
    getStoredUTMs() {
        try {
            const stored = localStorage.getItem('gadonobre_utm_params');
            return stored ? JSON.parse(stored) : {};
        } catch (error) {
            console.warn('⚠️ Erro ao recuperar UTMs salvos:', error);
            return {};
        }
    }

    /**
     * Gera string de query com parâmetros UTM
     */
    buildUTMQueryString() {
        const utms = this.getStoredUTMs();
        const params = new URLSearchParams();
        
        Object.entries(utms).forEach(([key, value]) => {
            if (value) {
                params.append(key, value);
            }
        });
        
        return params.toString();
    }

    /**
     * Atualiza todos os links de checkout com parâmetros UTM
     */
    updateCheckoutLinks() {
        const checkoutLinks = document.querySelectorAll('a#finalizarPedido');
        const utmQuery = this.buildUTMQueryString();
        
        checkoutLinks.forEach(link => {
            const currentHref = link.getAttribute('href');
            if (currentHref && utmQuery) {
                const separator = currentHref.includes('?') ? '&' : '?';
                const newHref = `${currentHref}${separator}${utmQuery}`;
                link.setAttribute('href', newHref);
                
                console.log(`🔗 Link de checkout atualizado: ${newHref}`);
            }
        });
    }

    /**
     * Rastreia navegação entre páginas para manter UTMs
     */
    trackPageNavigation() {
        // Intercepta cliques em links internos
        $(document).on('click', 'a[href*="produtos/"], a[href*="carnes/"], a.voltar', (e) => {
            const link = e.currentTarget;
            const href = link.getAttribute('href');
            
            if (href && !href.startsWith('http')) {
                e.preventDefault();
                
                // Adiciona UTMs ao link antes de navegar
                const utmQuery = this.buildUTMQueryString();
                let newHref = href;
                
                if (utmQuery) {
                    const separator = href.includes('?') ? '&' : '?';
                    newHref = `${href}${separator}${utmQuery}`;
                }
                
                console.log(`🔗 Navegando para: ${newHref}`);
                window.location.href = newHref;
            }
        });

        // Intercepta navegação programática
        const originalPushState = history.pushState;
        const originalReplaceState = history.replaceState;
        
        history.pushState = (...args) => {
            this.captureUTMParams();
            return originalPushState.apply(history, args);
        };
        
        history.replaceState = (...args) => {
            this.captureUTMParams();
            return originalReplaceState.apply(history, args);
        };
    }

    /**
     * Intercepta o clique no botão de finalizar para garantir UTMs
     */
    interceptFinalizarFunction() {
        // Intercepta o clique no botão #btFinalizar
        $(document).off('click', '#btFinalizar').on('click', '#btFinalizar', (e) => {
            e.preventDefault();
            
            // Captura UTMs da URL atual antes de redirecionar
            this.captureUTMParams();
            
            // Verifica conexão com internet
            verificarConexaoInternet().then(status => {
                if (status === 'conectado') {
                    let urlLoja = $('body').data('urlloja');
                    let checkoutUrl = "loja/" + urlLoja + "/finalizar";
                    
                    // Adiciona UTMs à URL do checkout
                    const utmQuery = this.buildUTMQueryString();
                    if (utmQuery) {
                        checkoutUrl += '?' + utmQuery;
                    }
                    
                    console.log('🔗 Redirecionando para checkout com UTMs:', checkoutUrl);
                    window.location.href = checkoutUrl;
                } else {
                    $('#modalCarregando').hide();
                    $("#modal button").addClass('confirmar');
                    mostrarPopup('Sem Conexão com a Internet',
                        'Parece que você está offline. Verifique sua conexão com a internet e tente novamente.');
                    return;
                }
            });
        });
    }

    /**
     * Comportamento padrão do finalizar se não houver função original
     */
    defaultFinalizarBehavior() {
        const checkoutLink = document.querySelector('a#finalizarPedido');
        if (checkoutLink && checkoutLink.getAttribute('href')) {
            window.location.href = checkoutLink.getAttribute('href');
        }
    }

    /**
     * Debug: mostra UTMs capturados no console
     */
    debugUTMs() {
        const utms = this.getStoredUTMs();
        const timestamp = localStorage.getItem('gadonobre_utm_timestamp');
        
        if (Object.keys(utms).length > 0) {
            console.log('🔍 UTMs ativos:', utms);
            console.log('⏰ Capturados em:', new Date(parseInt(timestamp)));
            console.log('🔗 Query string:', this.buildUTMQueryString());
        } else {
            console.log('ℹ️ Nenhum parâmetro UTM encontrado');
        }
    }

    /**
     * Limpa UTMs salvos (útil para testes)
     */
    clearUTMs() {
        localStorage.removeItem('gadonobre_utm_params');
        localStorage.removeItem('gadonobre_utm_timestamp');
        console.log('🗑️ UTMs limpos do localStorage');
    }

    /**
     * Método público para atualizar manualmente os links
     */
    refreshCheckoutLinks() {
        this.updateCheckoutLinks();
    }
}

// Inicializa automaticamente quando o DOM estiver pronto
document.addEventListener('DOMContentLoaded', function() {
    // Cria instância global
    window.utmManager = new UTMParamsManager();
    
    // Intercepta função finalizar após um pequeno delay
    setTimeout(() => {
        window.utmManager.interceptFinalizarFunction();
    }, 100);
});

// Para uso em desenvolvimento/debug
window.UTMParamsManager = UTMParamsManager;