// visualizador-script.js (Versão 2.7 - INCLUSÃO DO CARREGAMENTO DA IMAGEM BASE)
/**
 * Script responsável por carregar os dados do certificado do sessionStorage,
 * preencher os campos HTML e gerenciar a geração do PDF.
 *
 * Esta versão inclui a lógica para carregar a imagem base do certificado
 * usando a URL fornecida via CertificadoAjax (localização do WordPress).
 */

// Garante que a função só seja executada após o carregamento total do documento
window.onload = function() {
    
    jQuery(document).ready(function($) {
        
        // Configurações e elementos
        if (typeof CertificadoAjax === 'undefined') {
            console.error('Erro fatal: Objeto CertificadoAjax não encontrado.');
            return;
        }

        const $container = $('#certificado_container');
        const $statusMsg = $('#status_mensagem');
        const $downloadBtn = $('#download_pdf_btn');
        
        const $campoNome = $('#campo_nome');
        const $campoDia = $('#campo_dia');
        const $campoMes = $('#campo_mes');
        const $imagemBase = $('#imagem_base_certificado'); // NOVO: Referência à imagem

        // 1. TENTA RECUPERAR OS DADOS
        const dadosJSON = sessionStorage.getItem('dadosCertificado');
        const codigoBusca = sessionStorage.getItem('codigoBusca');

        if (!dadosJSON || !codigoBusca) {
            $statusMsg.css('color', 'red').text('Erro: Dados do certificado não encontrados. Retorne à autenticação.');
            $downloadBtn.prop('disabled', true);
            return;
        }

        try {
            const dados = JSON.parse(dadosJSON);
            
            // 2. CARREGAMENTO DA IMAGEM BASE
            // Usa a URL localizada no PHP e a aplica ao elemento <img>
            if (CertificadoAjax.base_image_url && $imagemBase.length) {
                $imagemBase.attr('src', CertificadoAjax.base_image_url);
                console.log('WP-CERT: Imagem base carregada de:', CertificadoAjax.base_image_url);
            } else {
                console.warn('WP-CERT: URL da imagem base ou elemento não encontrado. Usando placeholder.');
            }

            // 3. PREENCHIMENTO DOS CAMPOS
            const nomeTitular = (dados.nome_titular || 'NOME INDISPONÍVEL').toUpperCase();
            if ($campoNome.length) $campoNome.text(nomeTitular);

            // Usa os dados do PHP, ou '??' se não existirem
            const diaData = dados.dia_data || '??';
            const mesData = dados.mes_data ? dados.mes_data.toUpperCase() : '?? DE ????';

            if ($campoDia.length) $campoDia.text(diaData);
            if ($campoMes.length) $campoMes.text(mesData);
            
            // 4. CONFIGURAÇÃO DE DOWNLOAD
            const nomeTitularLimpo = nomeTitular.replace(/[^a-zA-Z0-9]/g, '_').substring(0, 20);
            const nomeArquivo = `Certificado_${nomeTitularLimpo}_${codigoBusca}.pdf`;
            
            $statusMsg.css('color', 'green').text(`Certificado de ${nomeTitular} carregado. Pronto para download.`);
            $downloadBtn.prop('disabled', false).text('⬇️ Download Certificado PDF');

            // Limpa os dados de sessão (OPCIONAL: Manter para permitir vários downloads ou remover para forçar nova busca)
            // sessionStorage.removeItem('dadosCertificado');
            // sessionStorage.removeItem('codigoBusca');

            // 5. LÓGICA DE GERAÇÃO DE PDF
            $downloadBtn.off('click').on('click', function() {
                $statusMsg.text('Gerando PDF... Por favor, aguarde.');
                $downloadBtn.prop('disabled', true).text('Gerando PDF...');
                
                // CRÍTICO: Força o redesenho do DOM (DOM flush) antes de começar
                $container.width(); 

                // Adiciona um pequeno atraso para o navegador processar a imagem e o redesenho
                // O aumento para 500ms é importante para dar tempo de carregar a imagem externa
                setTimeout(() => {
                    
                    // Constante de Escala Ajustada (0.3 é a melhor relação para 16:9 em A4 Paisagem)
                    const PDF_SCALE = 0.3; 
                    
                    const options = {
                        margin: 0, 
                        filename: nomeArquivo,
                        image: { type: 'jpeg', quality: 0.95 }, 
                        
                        // CRÍTICO: Define o scale geral para forçar o encaixe do conteúdo na largura do PDF.
                        scale: PDF_SCALE, 
                        
                        // Garante que não haja quebras de página
                        pagebreak: { mode: 'avoid-all' },
                        
                        html2canvas: { 
                            // REDUZIDO PARA 1: Diminuir a escala da captura do html2canvas,
                            // o que pode corrigir o bug de corte (1/4) e economizar memória.
                            scale: 1, 
                            logging: false, 
                            dpi: 192, 
                            letterRendering: true, 
                            
                            // === CORREÇÃO CRÍTICA PARA ERROS 404 (BLOQUEIO ESTRUTURAL MÁXIMO) ===
                            onclone: function (clonedDoc) {
                                // Seletor para elementos estruturais comuns e Elementor wrappers
                                const structuralSelectors = [
                                    'header', 'nav', 'footer', '.navbar', '#breadcrumbs',
                                    '.wp-toolbar', '#wpadminbar', '.elementor-menu-anchor', 
                                    'script', 
                                    'style:not(style#certificado-style-css)', 
                                    '.elementor-section:not(#certificado_container)', 
                                    '.elementor-column',
                                    '.elementor-widget-wrap',
                                ];
                                structuralSelectors.forEach(selector => {
                                    clonedDoc.querySelectorAll(selector).forEach(el => el.remove());
                                });
                                
                                // Remove TODAS as outras imagens e ícones (exceto a imagem base do certificado)
                                clonedDoc.querySelectorAll('img:not(#imagem_base_certificado)').forEach(el => el.remove());
                                clonedDoc.querySelectorAll('link[rel*="icon"]').forEach(el => el.remove());
                                clonedDoc.querySelectorAll('link[rel*="shortcut"]').forEach(el => el.remove());

                                // Remove o BODY e o HTML clonado para limpar estilos externos (Ação Extrema)
                                clonedDoc.querySelector('body').classList.value = ''; 
                                clonedDoc.querySelector('html').classList.value = ''; 
                            }
                            // =====================================
                        },
                        
                        jsPDF: { 
                            unit: 'mm', 
                            // Reverte para o formato A4 padrão, confiando no 'scale' para o dimensionamento
                            format: 'a4', 
                            orientation: 'landscape' 
                        }
                    };
                    
                    // Inicia a geração do PDF a partir do contêiner (#certificado_container)
                    html2pdf().from($container[0]).set(options).save().then(function() {
                        $statusMsg.css('color', 'green').text('Download concluído!');
                    }).catch(function(error) {
                        console.error('Erro na geração do PDF (Falha de Escala/Corte):', error);
                        // Mensagem de erro mais informativa
                        $statusMsg.css('color', 'red').text('ERRO CRÍTICO NO PDF: Falha na escala. O problema pode ser no CSS da altura.');
                    }).finally(function() {
                        $downloadBtn.prop('disabled', false).text('⬇️ Download Certificado PDF');
                    });
                }, 500); // Atraso aumentado para garantir que a imagem seja renderizada
            });

        } catch (e) {
            console.error('DEBUG: Erro CRÍTICO ao fazer parse do JSON:', e);
            $statusMsg.css('color', 'red').text('Erro ao processar os dados do certificado.');
            $downloadBtn.prop('disabled', true);
        }
    });
};