document.addEventListener('DOMContentLoaded', function() {
    console.log('Carregando script pagamentos.js...');
    
    // Inicializar DataTable
    const table = $('#tabelaPagamentos').DataTable({
        language: {
            url: '//cdn.datatables.net/plug-ins/1.13.7/i18n/pt-BR.json'
        },
        columnDefs: [
            {
                targets: 3, // Coluna de data
                type: 'date-br',
                render: function(data, type, row) {
                    if (type === 'sort') {
                        return data.split('/').reverse().join('');
                    }
                    return data;
                }
            },
            {
                targets: 2, // Coluna de valor
                type: 'numeric',
                render: function(data, type, row) {
                    if (type === 'sort') {
                        return parseFloat(data.replace('R$ ', '').replace(',', '.'));
                    }
                    return data;
                }
            },
            { targets: -1, orderable: false } // Coluna de ações
        ],
        order: [[3, 'desc']] // Ordenar por data decrescente por padrão
    });

    // Configuração do modal de edição
    const modalEditarPagamento = document.getElementById('modalEditarPagamento');
    if (modalEditarPagamento) {
        modalEditarPagamento.addEventListener('show.bs.modal', function(event) {
            console.log('Modal de edição sendo exibido');
            const button = event.relatedTarget;
            
            if (!button) {
                console.error('Botão não encontrado!');
                return;
            }
            
            const pagamentoId = button.getAttribute('data-pagamento-id');
            console.log('ID do pagamento:', pagamentoId);
            
            // Dados do pagamento
            const dados = {
                militanteId: button.getAttribute('data-militante-id'),
                militanteNome: button.closest('tr').querySelector('td').textContent.trim(),
                tipoPagamento: button.getAttribute('data-tipo-pagamento'),
                valor: button.getAttribute('data-valor'),
                dataPagamento: button.getAttribute('data-data-pagamento')
            };
            console.log('Dados do pagamento:', dados);
            
            // Preencher campos
            document.getElementById('editMilitante').value = dados.militanteId;
            document.getElementById('editMilitanteNome').value = dados.militanteNome;
            document.getElementById('editTipoPagamento').value = dados.tipoPagamento;
            document.getElementById('editValor').value = dados.valor;
            document.getElementById('editDataPagamento').value = dados.dataPagamento;
            
            // Configurar formulário
            const form = document.getElementById('formEditarPagamento');
            if (form) {
                form.action = `/pagamentos/editar/${pagamentoId}`;
                console.log('Action do formulário:', form.action);
                
                // Remover listeners antigos para evitar duplicação
                const newForm = form.cloneNode(true);
                form.parentNode.replaceChild(newForm, form);
                
                // Adicionar listener para o submit do formulário
                newForm.addEventListener('submit', function(e) {
                    e.preventDefault();
                    console.log('Formulário submetido');
                    
                    // Criar FormData com os dados do formulário
                    const formData = new FormData(this);
                    
                    // Log dos dados sendo enviados
                    console.log('Dados do formulário:');
                    for (let [key, value] of formData.entries()) {
                        console.log(key + ': ' + value);
                    }
                    
                    // Enviar requisição
                    fetch(this.action, {
                        method: 'POST',
                        body: formData
                    })
                    .then(response => {
                        console.log('Status da resposta:', response.status);
                        return response.json();
                    })
                    .then(data => {
                        console.log('Resposta:', data);
                        if (data.status === 'success') {
                            // Fechar modal
                            const modal = bootstrap.Modal.getInstance(modalEditarPagamento);
                            modal.hide();
                            
                            // Recarregar página
                            window.location.reload();
                        } else {
                            alert('Erro ao atualizar pagamento: ' + data.message);
                        }
                    })
                    .catch(error => {
                        console.error('Erro:', error);
                        alert('Erro ao atualizar pagamento. Por favor, tente novamente.');
                    });
                });
            }
        });
    }

    // Configuração do modal de exclusão
    const modalExcluirPagamento = document.getElementById('modalExcluirPagamento');
    if (modalExcluirPagamento) {
        modalExcluirPagamento.addEventListener('show.bs.modal', function(event) {
            console.log('Modal de exclusão sendo exibido');
            const button = event.relatedTarget;
            
            if (!button) {
                console.error('Botão não encontrado!');
                return;
            }
            
            const pagamentoId = button.getAttribute('data-pagamento-id');
            const pagamentoInfo = button.getAttribute('data-pagamento-info');
            console.log('ID do pagamento:', pagamentoId);
            
            // Atualizar informações no modal
            document.getElementById('pagamentoInfo').textContent = pagamentoInfo;
            
            // Configurar formulário
            const form = document.getElementById('formExcluirPagamento');
            if (form) {
                form.action = `/pagamentos/excluir/${pagamentoId}`;
                console.log('Action do formulário:', form.action);
                
                // Remover listeners antigos para evitar duplicação
                const newForm = form.cloneNode(true);
                form.parentNode.replaceChild(newForm, form);
                
                // Adicionar listener para o submit do formulário
                newForm.addEventListener('submit', function(e) {
                    e.preventDefault();
                    console.log('Formulário submetido');
                    
                    // Enviar requisição
                    fetch(this.action, {
                        method: 'POST'
                    })
                    .then(response => {
                        console.log('Status da resposta:', response.status);
                        return response.json();
                    })
                    .then(data => {
                        console.log('Resposta:', data);
                        if (data.status === 'success') {
                            // Fechar modal
                            const modal = bootstrap.Modal.getInstance(modalExcluirPagamento);
                            modal.hide();
                            
                            // Recarregar página
                            window.location.reload();
                        } else {
                            alert('Erro ao excluir pagamento: ' + data.message);
                        }
                    })
                    .catch(error => {
                        console.error('Erro:', error);
                        alert('Erro ao excluir pagamento. Por favor, tente novamente.');
                    });
                });
            }
        });
    }

    // Configuração do formulário de novo pagamento
    const formNovoPagamento = document.getElementById('formNovoPagamento');
    if (formNovoPagamento) {
        formNovoPagamento.addEventListener('submit', function(e) {
            e.preventDefault();
            console.log('Formulário de novo pagamento submetido');
            
            // Criar FormData com os dados do formulário
            const formData = new FormData(this);
            
            // Log dos dados sendo enviados
            console.log('Dados do formulário:');
            for (let [key, value] of formData.entries()) {
                console.log(key + ': ' + value);
            }
            
            // Enviar requisição
            fetch(this.action, {
                method: 'POST',
                body: formData
            })
            .then(response => {
                console.log('Status da resposta:', response.status);
                return response.json();
            })
            .then(data => {
                console.log('Resposta:', data);
                if (data.status === 'success') {
                    // Fechar modal
                    const modal = bootstrap.Modal.getInstance(document.getElementById('modalNovoPagamento'));
                    modal.hide();
                    
                    // Recarregar página
                    window.location.reload();
                } else {
                    alert('Erro ao adicionar pagamento: ' + data.message);
                }
            })
            .catch(error => {
                console.error('Erro:', error);
                alert('Erro ao adicionar pagamento. Por favor, tente novamente.');
            });
        });
    }

    // Configuração do botão de exportar
    const btnExportar = document.getElementById('btnExportar');
    if (btnExportar) {
        btnExportar.addEventListener('click', function() {
            console.log('Exportando dados...');
            
            // Coletar dados da tabela
            const dados = [];
            table.rows().every(function() {
                const row = this.data();
                dados.push({
                    militante: row[0],
                    tipo_pagamento: row[1],
                    valor: row[2].replace('R$ ', ''),
                    data_pagamento: row[3]
                });
            });
            
            // Converter para CSV
            const csv = [
                ['Militante', 'Tipo de Pagamento', 'Valor', 'Data do Pagamento'],
                ...dados.map(row => [
                    row.militante,
                    row.tipo_pagamento,
                    row.valor,
                    row.data_pagamento
                ])
            ]
            .map(row => row.join(','))
            .join('\n');
            
            // Criar blob e fazer download
            const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });
            const link = document.createElement('a');
            if (link.download !== undefined) {
                const url = URL.createObjectURL(blob);
                link.setAttribute('href', url);
                link.setAttribute('download', 'pagamentos.csv');
                link.style.visibility = 'hidden';
                document.body.appendChild(link);
                link.click();
                document.body.removeChild(link);
            }
        });
    }

    // Funções de validação e formatação de datas
    function validarData(data) {
        if (!data) return false;
        
        const dataObj = new Date(data);
        if (isNaN(dataObj.getTime())) return false;
        
        const hoje = new Date();
        hoje.setHours(0, 0, 0, 0);
        
        return dataObj <= hoje;
    }

    function formatarData(data) {
        if (!data) return '';
        
        const dataObj = new Date(data);
        if (isNaN(dataObj.getTime())) return '';
        
        return dataObj.toLocaleDateString('pt-BR');
    }

    // Configurar campos de data
    const camposData = document.querySelectorAll('input[type="date"]');
    camposData.forEach(campo => {
        // Definir data máxima como hoje
        const hoje = new Date().toISOString().split('T')[0];
        campo.setAttribute('max', hoje);
        
        campo.addEventListener('change', function() {
            if (!validarData(this.value)) {
                this.setCustomValidity('Data inválida ou futura');
                this.classList.add('is-invalid');
            } else {
                this.setCustomValidity('');
                this.classList.remove('is-invalid');
            }
        });
    });
}); 