document.addEventListener('DOMContentLoaded', function () {
    const boostForm = document.querySelector('form.imz-boost-form');
    if (!boostForm) return;

    // Elementos para o uploader de ficheiros (método manual)
    const fileInput = boostForm.querySelector('#comprovativo_upload');
    const hiddenInput = boostForm.querySelector('#comprovativo_attachment_id');
    const manualSubmitButton = boostForm.querySelector('button[name="imz_submit"]');
    
    // Elementos partilhados (uploader e mensagens)
    const progressBar = boostForm.querySelector('.imz-progress-bar');
    const progressText = boostForm.querySelector('.imz-progress-text');
    const fileNotice = boostForm.querySelector('.imz-file-notice');
    
    // Elementos para o pagamento via API M-Pesa
    const apiSubmitBtn = document.getElementById('imz-api-submit-btn');
    const formMessages = document.getElementById('imz-form-messages');

    // Lógica para o UPLOADER de comprovativos (método manual)
    if (fileInput) {
        // Desativa o botão de submissão manual até que o upload seja concluído
        if (manualSubmitButton) {
            manualSubmitButton.disabled = true;
        }

        fileInput.addEventListener('change', function () {
            if (this.files.length === 0) return;

            const file = this.files[0];
            const allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];
            const maxSize = 2 * 1024 * 1024; // 2MB

            if (!allowedTypes.includes(file.type)) {
                fileNotice.textContent = 'Erro: Apenas imagens (JPG, PNG, GIF) são permitidas.';
                fileNotice.style.color = 'red';
                this.value = '';
                return;
            }

            if (file.size > maxSize) {
                fileNotice.textContent = 'Erro: O ficheiro não pode exceder 2MB.';
                fileNotice.style.color = 'red';
                this.value = '';
                return;
            }

            uploadFile(file);
        });

        function uploadFile(file) {
            const formData = new FormData();
            formData.append('boost_receipt', file);
            formData.append('action', 'imz_upload_boost_receipt');
            formData.append('nonce', imz_boost_ajax_data.nonce_upload); // Nonce para o upload

            const xhr = new XMLHttpRequest();

            xhr.upload.addEventListener('progress', function (e) {
                if (e.lengthComputable) {
                    const percentComplete = (e.loaded / e.total) * 100;
                    progressBar.style.width = percentComplete + '%';
                    progressText.textContent = Math.round(percentComplete) + '%';
                }
            });

            xhr.addEventListener('load', function () {
                progressBar.style.width = '100%';
                try {
                    const response = JSON.parse(xhr.responseText);
                    if (response.success) {
                        progressText.textContent = 'Concluído!';
                        progressBar.style.backgroundColor = '#22c55e';
                        hiddenInput.value = response.data.attachment_id;
                        if(manualSubmitButton) manualSubmitButton.disabled = false;
                        fileNotice.textContent = `Ficheiro "${file.name}" carregado.`;
                        fileNotice.style.color = 'green';
                    } else {
                        throw new Error(response.data.message || 'Erro desconhecido.');
                    }
                } catch (error) {
                    progressText.textContent = 'Falhou!';
                    progressBar.style.backgroundColor = '#ef4444';
                    fileNotice.textContent = 'Erro no upload: ' + error.message;
                    if(manualSubmitButton) manualSubmitButton.disabled = true;
                }
            });

            xhr.addEventListener('error', function () {
                progressText.textContent = 'Falhou!';
                progressBar.style.backgroundColor = '#ef4444';
                fileNotice.textContent = 'Ocorreu um erro de rede.';
                if(manualSubmitButton) manualSubmitButton.disabled = true;
            });

            xhr.open('POST', imz_boost_ajax_data.ajax_url, true);
            xhr.send(formData);

            if(manualSubmitButton) manualSubmitButton.disabled = true;
            progressBar.style.width = '0%';
            progressText.textContent = '0%';
            progressBar.style.backgroundColor = '#3b82f6';
        }
    }

    // Lógica para o PAGAMENTO via API M-Pesa
    if (apiSubmitBtn) {
        boostForm.addEventListener('submit', function (e) {
            e.preventDefault(); // Impede a submissão tradicional do formulário
            
            formMessages.innerHTML = '<div class="imz-message imz-message-warning">A processar o seu pedido, por favor aguarde...</div>';
            apiSubmitBtn.disabled = true;

            const formData = new FormData(boostForm);
            const phoneInput = boostForm.querySelector('#telefone_pagador');
            const amountInput = boostForm.querySelector('input[name="valor"]:checked');
            const postIdInput = boostForm.querySelector('input[name="post_id"]');

            // Adiciona os dados necessários para o pedido AJAX
            formData.append('action', 'imz_initiate_mpesa');
            formData.append('nonce', imz_boost_ajax_data.nonce_payment);
            formData.append('phone', phoneInput ? phoneInput.value : '');
            formData.append('amount', amountInput ? amountInput.value : '');
            formData.append('post_id', postIdInput ? postIdInput.value : '');

            fetch(imz_boost_ajax_data.ajax_url, {
                method: 'POST',
                body: new URLSearchParams(formData) // Envia como 'application/x-www-form-urlencoded'
            })
            .then(response => response.json())
            .then(result => {
                if (result.success) {
                    formMessages.innerHTML = `<div class="imz-message imz-message-success">${result.data.message}</div>`;
                    // O botão fica desativado após um pedido bem-sucedido para evitar duplicação
                } else {
                    throw new Error(result.data.message || 'Ocorreu um erro desconhecido.');
                }
            })
            .catch(error => {
                formMessages.innerHTML = `<div class="imz-message imz-message-error">${error.message}</div>`;
                apiSubmitBtn.disabled = false; // Reativa o botão em caso de erro
            });
        });
    }
});