// Variáveis globais para os widgets reCAPTCHA
let codeRecaptchaWidgetId = null; // Para guardar o ID do widget do formulário de código
let codeRecaptchaRendered = false; // Flag para evitar renderizar múltiplas vezes
let requestRecaptchaWidgetId = null; // Para o formulário de pedido
let requestRecaptchaRendered = false; // Flag para o formulário de pedido
let isRecaptchaApiReady = false; // Flag para saber se a API do Google já carregou

/**
 * Função auxiliar para renderizar o reCAPTCHA no formulário de CÓDIGO.
 * Só executa se a API estiver pronta, o formulário estiver visível e ainda não tiver sido renderizado.
 */
function imzRenderPurchaseRecaptcha() {
    const formCode = document.getElementById('imz-use-code-form');
    const messagesDiv = document.getElementById('imz-purchase-messages');
    const recaptchaDiv = document.getElementById('imz-purchase-code-recaptcha');
    const recaptchaSiteKey = (typeof imz_ajax_data !== 'undefined' && imz_ajax_data.recaptcha_site_key) ? imz_ajax_data.recaptcha_site_key : null;
    const codePanel = document.getElementById('imz-code-panel');
    const isPanelVisible = codePanel ? codePanel.classList.contains('active') : (formCode && formCode.style.display === 'block');

    if (isRecaptchaApiReady && !codeRecaptchaRendered && formCode && isPanelVisible && recaptchaDiv && recaptchaSiteKey) {
        try {
            codeRecaptchaWidgetId = grecaptcha.render(recaptchaDiv.id, { //
                'sitekey': recaptchaSiteKey //
            });
            codeRecaptchaRendered = true; // Marca como renderizado
            // Limpa qualquer mensagem de erro de carregamento anterior
            if (messagesDiv) messagesDiv.innerHTML = ''; //
        } catch (e) {
            console.error("Erro ao renderizar reCAPTCHA (Código):", e); //
            if (messagesDiv) { //
                messagesDiv.innerHTML = '<p class="imz-message imz-message-error">Erro ao carregar a verificação de segurança. Tente recarregar a página.</p>'; //
            }
        }
    } else if (isRecaptchaApiReady && !recaptchaSiteKey && messagesDiv && formCode && formCode.style.display === 'block') { //
         // Se a API está pronta mas não há chave (erro de configuração)
         messagesDiv.innerHTML = '<p class="imz-message imz-message-error">reCAPTCHA não configurado corretamente.</p>'; //
    }
}

/**
 * Função auxiliar para renderizar o reCAPTCHA no formulário de PEDIDO de compra.
 */
function imzRenderPurchaseRequestRecaptcha() {
    const formBuy = document.getElementById('imz-buy-request-form');
    const messagesDiv = document.getElementById('imz-purchase-messages');
    const recaptchaDiv = document.getElementById('imz-purchase-request-recaptcha');
    const recaptchaSiteKey = (typeof imz_ajax_data !== 'undefined' && imz_ajax_data.recaptcha_site_key) ? imz_ajax_data.recaptcha_site_key : null;
    const buyPanel = document.getElementById('imz-buy-panel');
    const isPanelVisible = buyPanel ? buyPanel.classList.contains('active') : (formBuy && formBuy.style.display === 'block');

    if (isRecaptchaApiReady && !requestRecaptchaRendered && formBuy && isPanelVisible && recaptchaDiv && recaptchaSiteKey) {
        try {
            requestRecaptchaWidgetId = grecaptcha.render(recaptchaDiv.id, { //
                'sitekey': recaptchaSiteKey //
            });
            requestRecaptchaRendered = true; //
            if (messagesDiv) messagesDiv.innerHTML = ''; // Limpa erros de carregamento
        } catch (e) {
            console.error("Erro ao renderizar reCAPTCHA (Pedido):", e); //
            if (messagesDiv) { //
                messagesDiv.innerHTML = '<p class="imz-message imz-message-error">Erro ao carregar a verificação de segurança. Tente recarregar a página.</p>'; //
            }
        }
    } else if (isRecaptchaApiReady && !recaptchaSiteKey && messagesDiv && formBuy && formBuy.style.display === 'block') { //
         messagesDiv.innerHTML = '<p class="imz-message imz-message-error">reCAPTCHA não configurado corretamente.</p>'; //
    }
}


/**
 * Função de Callback chamada pela API do Google reCAPTCHA quando estiver pronta.
 */
function imzPurchaseRecaptchaReady() { //
    isRecaptchaApiReady = true; //
    // Tenta renderizar caso algum dos formulários já esteja visível
    imzRenderPurchaseRequestRecaptcha(); // Tenta renderizar o do Form 1
    imzRenderPurchaseRecaptcha(); // Tenta renderizar o do Form 2
}

// O código principal dentro do DOMContentLoaded
document.addEventListener('DOMContentLoaded', function () {
    const container = document.querySelector('.imz-purchase-flow-container'); //
    if (!container) return;

    const btnShowBuy = document.getElementById('imz-show-buy-form'); //
    const btnShowCode = document.getElementById('imz-show-code-form'); //
    const btnShowVerify = document.getElementById('imz-show-verify-form'); // NOVO
    const formBuy = document.getElementById('imz-buy-request-form'); //
    const formCode = document.getElementById('imz-use-code-form'); //
    const formVerify = document.getElementById('imz-verify-artist-form'); // NOVO
    const messagesDiv = document.getElementById('imz-purchase-messages'); //
    const verificationResultsDiv = document.getElementById('imz-verification-results'); // NOVO


    // Assume 'imz_ajax_data' is globally available via wp_localize_script
    const ajax_url = (typeof imz_ajax_data !== 'undefined') ? imz_ajax_data.ajax_url : null; //
    if (!ajax_url) { //
        console.error("imz_ajax_data.ajax_url não está definido!"); //
        // Opcional: Mostrar erro ao utilizador
        return; //
    }
    const recaptchaSiteKey = (typeof imz_ajax_data !== 'undefined' && imz_ajax_data.recaptcha_site_key) ? imz_ajax_data.recaptcha_site_key : null; // Define a variável aqui também

    // Listener para o botão 1 (Comprar Código)
    if (btnShowBuy) {
        btnShowBuy.addEventListener('click', function() {
            if(messagesDiv) messagesDiv.innerHTML = '';
            if (codeRecaptchaWidgetId !== null && typeof grecaptcha !== 'undefined' && grecaptcha) {
                try { grecaptcha.reset(codeRecaptchaWidgetId); } catch(e) {}
            }
            imzRenderPurchaseRequestRecaptcha();
        });
    }

    // Listener para o botão 2 (Introduzir Código)
    if (btnShowCode) {
        btnShowCode.addEventListener('click', function() {
            if(messagesDiv) messagesDiv.innerHTML = '';
            if (requestRecaptchaWidgetId !== null && typeof grecaptcha !== 'undefined' && grecaptcha) {
                try { grecaptcha.reset(requestRecaptchaWidgetId); } catch(e) {}
            }
            imzRenderPurchaseRecaptcha();
        });
    }

    // Listener para o botão 3 (Verificar Artista)
    if (btnShowVerify) {
        btnShowVerify.addEventListener('click', function() {
            if(messagesDiv) messagesDiv.innerHTML = '';
            if(verificationResultsDiv) verificationResultsDiv.style.display = 'none';
            if (requestRecaptchaWidgetId !== null && typeof grecaptcha !== 'undefined' && grecaptcha) {
                try { grecaptcha.reset(requestRecaptchaWidgetId); } catch(e) {}
            }
            if (codeRecaptchaWidgetId !== null && typeof grecaptcha !== 'undefined' && grecaptcha) {
                try { grecaptcha.reset(codeRecaptchaWidgetId); } catch(e) {}
            }
        });
    }

    // Handler para o Formulário 1 (Pedir contacto)
    if (formBuy) {
        formBuy.addEventListener('submit', function(e) {
            e.preventDefault(); //
            const submitBtn = formBuy.querySelector('button[type="submit"]'); //
            if(messagesDiv) messagesDiv.innerHTML = '<p class="imz-message imz-message-warning">A enviar o seu pedido...</p>'; //
            if(submitBtn) submitBtn.disabled = true; //

            const formData = new FormData(formBuy); //
            formData.append('action', 'imz_request_purchase_code'); // AJAX action
            // O nonce e a resposta reCAPTCHA são adicionados automaticamente

            fetch(ajax_url, { //
                method: 'POST', //
                body: new URLSearchParams(formData) //
            })
            .then(res => res.json()) //
            .then(result => {
                // Resetar reCAPTCHA (Pedido) após sucesso/erro
                if (requestRecaptchaWidgetId !== null && typeof grecaptcha !== 'undefined' && grecaptcha) { //
                     try { grecaptcha.reset(requestRecaptchaWidgetId); } catch(e) { console.warn("Não foi possível resetar o widget reCAPTCHA (pedido):", e); } //
                }
                if (result.success) { //
                    if(messagesDiv) messagesDiv.innerHTML = `<p class="imz-message imz-message-success">${result.data.message}</p>`; //
                    formBuy.reset(); //
                    if(submitBtn) submitBtn.disabled = false; // Reativa para permitir novo pedido
                } else {
                    throw new Error(result.data.message || 'Ocorreu um erro.'); //
                }
            })
            .catch(err => {
                 // Resetar reCAPTCHA (Pedido) no erro
                if (requestRecaptchaWidgetId !== null && typeof grecaptcha !== 'undefined' && grecaptcha) { //
                     try { grecaptcha.reset(requestRecaptchaWidgetId); } catch(e) { console.warn("Não foi possível resetar o widget reCAPTCHA (pedido):", e); } //
                }
                if(messagesDiv) messagesDiv.innerHTML = `<p class="imz-message imz-message-error">${err.message}</p>`; //
                if(submitBtn) submitBtn.disabled = false; //
            });
        });
    }

    // Handler para o Formulário 2 (Validar código)
    if (formCode) {
        formCode.addEventListener('submit', function(e) {
            e.preventDefault(); //
            const submitBtn = formCode.querySelector('button[type="submit"]'); //
            if(messagesDiv) messagesDiv.innerHTML = '<p class="imz-message imz-message-warning">A validar o seu código...</p>'; //
            if(submitBtn) submitBtn.disabled = true; //

            const formData = new FormData(formCode); //
            formData.append('action', 'imz_validate_purchase_code'); // AJAX action
            // O nonce e a resposta reCAPTCHA são adicionados automaticamente

            fetch(ajax_url, { //
                method: 'POST', //
                body: new URLSearchParams(formData) //
            })
            .then(res => res.json()) //
            .then(result => {
                // Resetar reCAPTCHA após resposta (sucesso ou erro)
                 if (codeRecaptchaWidgetId !== null && typeof grecaptcha !== 'undefined' && grecaptcha) { //
                     try { grecaptcha.reset(codeRecaptchaWidgetId); } catch(e) { console.warn("Não foi possível resetar o widget reCAPTCHA (código):", e); } //
                 }

                if (result.success) { //
                    if(messagesDiv) messagesDiv.innerHTML = `<p class="imz-message imz-message-success">${result.data.message}</p>`; //
                    window.location.href = result.data.download_url; //
                     // Não reativar botão em caso de sucesso (redirecionamento)
                } else {
                    throw new Error(result.data.message || 'Ocorreu um erro.'); //
                }
            })
            .catch(err => {
                // Resetar reCAPTCHA no erro (já feito acima no .then)
                 if (codeRecaptchaWidgetId !== null && typeof grecaptcha !== 'undefined' && grecaptcha) { //
                     try { grecaptcha.reset(codeRecaptchaWidgetId); } catch(e) { console.warn("Não foi possível resetar o widget reCAPTCHA (código):", e); } //
                 }
                if(messagesDiv) messagesDiv.innerHTML = `<p class="imz-message imz-message-error">${err.message}</p>`; //
                if(submitBtn) submitBtn.disabled = false; //
            });
        });
    }

     // Handler para o Formulário 3 (Verificar Código do Artista)
     if (formVerify) { //
        formVerify.addEventListener('submit', function(e) { //
            e.preventDefault(); //
            const submitBtn = formVerify.querySelector('button[type="submit"]'); //
            // Usar o div de resultados para mensagens temporárias também
            if(verificationResultsDiv) { //
                verificationResultsDiv.innerHTML = '<p class="imz-message imz-message-warning">A verificar...</p>'; //
                verificationResultsDiv.style.display = 'block'; // Mostra o div
            }
            if(submitBtn) submitBtn.disabled = true; //

            const formData = new FormData(formVerify); //
            formData.append('action', 'imz_verify_artist_code'); // Nova ação AJAX
            // Adiciona o novo nonce
            if (typeof imz_ajax_data !== 'undefined' && imz_ajax_data.nonce_verify_artist) { //
                formData.append('imz_verify_nonce_field', imz_ajax_data.nonce_verify_artist); //
            } else {
                 console.error("Nonce de verificação não encontrado!"); //
                 if(verificationResultsDiv) verificationResultsDiv.innerHTML = '<p class="imz-message imz-message-error">Erro de configuração (nonce).</p>'; //
                 if(submitBtn) submitBtn.disabled = false; //
                 return; //
            }


            fetch(ajax_url, { //
                method: 'POST', //
                body: new URLSearchParams(formData) //
            })
            .then(res => res.json()) //
            .then(result => {
                if (result.success) { //
                    // Mostra os resultados formatados
                    if(verificationResultsDiv) { //
                        verificationResultsDiv.innerHTML = `
                            <p class="imz-message imz-message-success" style="margin-bottom: 10px;">${result.data.message}</p>
                            <p><strong>Artista:</strong> ${result.data.artist_name}</p>
                            <p><strong>Música:</strong> ${result.data.music_title}</p>
                        `; //
                    }
                } else {
                    throw new Error(result.data.message || 'Ocorreu um erro.'); //
                }
            })
            .catch(err => {
                // Mostra erro no div de resultados
                if(verificationResultsDiv) { //
                    verificationResultsDiv.innerHTML = `<p class="imz-message imz-message-error">${err.message}</p>`; //
                }
            })
            .finally(() => {
                // Reativa o botão independentemente do resultado
                 if(submitBtn) submitBtn.disabled = false; //
            });
        });
    }

}); // Fim do DOMContentLoaded

// ** IMPORTANTE: Defina a função de callback `imzPurchaseRecaptchaReady` no escopo global **
// A linha abaixo garante que a função está acessível quando a API do Google a chamar.
window.imzPurchaseRecaptchaReady = imzPurchaseRecaptchaReady; //