console.log('Carregando script militantes.js...');

// Variáveis globais para controle dos filtros e paginação
let filtroAtual = 'todos';
let filtroResponsabilidade = null;
let filtroCelula = null;
let currentPage = 1;
let rowsPerPage = 20;
let totalRows = 0;

// Função para calcular o total de páginas
function calculateTotalPages() {
    const allRows = document.querySelectorAll('#militantesTable tbody tr');
    const visibleRows = Array.from(allRows).filter(row => 
        !row.hasAttribute('data-filtered-out')
    );
    totalRows = visibleRows.length;
    return Math.ceil(totalRows / rowsPerPage);
}

// Função para atualizar o texto de contagem
function updateCountText() {
    const allRows = document.querySelectorAll('#militantesTable tbody tr');
    const visibleRows = Array.from(allRows).filter(row => 
        !row.hasAttribute('data-filtered-out')
    );
    totalRows = visibleRows.length;
    const startIndex = (currentPage - 1) * rowsPerPage + 1;
    const endIndex = Math.min(currentPage * rowsPerPage, totalRows);
    
    // Atualizar texto de contagem
    document.getElementById('countMilitantes').textContent = 
        `${startIndex}-${endIndex} de ${totalRows}`;
}

// Função para atualizar a paginação
function updatePagination() {
    const totalPages = calculateTotalPages();
    const paginationUl = document.querySelector('.pagination');
    const prevPage = document.getElementById('prevPage');
    const nextPage = document.getElementById('nextPage');

    // Limpar páginas existentes (exceto prev e next)
    const pageItems = paginationUl.querySelectorAll('li:not(#prevPage):not(#nextPage)');
    pageItems.forEach(item => item.remove());

    // Adicionar novas páginas
    for (let i = 1; i <= totalPages; i++) {
        const li = document.createElement('li');
        li.className = `page-item${i === currentPage ? ' active' : ''}`;
        li.innerHTML = `<a class="page-link" href="#">${i}</a>`;
        li.addEventListener('click', (e) => {
            e.preventDefault();
            currentPage = i;
            updateVisibleRows();
            updatePagination();
        });
        paginationUl.insertBefore(li, nextPage);
    }

    // Atualizar estado dos botões prev/next
    prevPage.classList.toggle('disabled', currentPage === 1);
    nextPage.classList.toggle('disabled', currentPage === totalPages || totalPages === 0);

    // Adicionar eventos aos botões prev/next
    prevPage.onclick = (e) => {
        e.preventDefault();
        if (currentPage > 1) {
            currentPage--;
            updateVisibleRows();
            updatePagination();
        }
    };

    nextPage.onclick = (e) => {
        e.preventDefault();
        if (currentPage < totalPages) {
            currentPage++;
            updateVisibleRows();
            updatePagination();
        }
    };

    // Atualizar texto de contagem
    updateCountText();
}

// Função para atualizar as linhas visíveis
function updateVisibleRows() {
    const allRows = document.querySelectorAll('#militantesTable tbody tr');
    const visibleRows = Array.from(allRows).filter(row => 
        !row.hasAttribute('data-filtered-out')
    );
    
    const startIndex = (currentPage - 1) * rowsPerPage;
    const endIndex = startIndex + rowsPerPage;

    visibleRows.forEach((row, index) => {
        if (index >= startIndex && index < endIndex) {
            row.style.display = '';
        } else {
            row.style.display = 'none';
        }
    });

    updateCountText();
}

// Função para filtrar militantes
function filtrarMilitantes() {
    const searchTerm = document.getElementById('searchInput').value.toLowerCase();
    const rows = document.querySelectorAll('#militantesTable tbody tr');

    rows.forEach(row => {
        let shouldShow = true;

        // Filtro de texto
        const textContent = row.textContent.toLowerCase();
        if (!textContent.includes(searchTerm)) {
            shouldShow = false;
        }

        // Filtro de responsabilidades
        if (filtroResponsabilidade) {
            const badges = row.querySelectorAll('.badge');
            const hasResponsabilidade = Array.from(badges).some(badge => 
                badge.textContent.toLowerCase() === filtroResponsabilidade.toLowerCase()
            );
            if (!hasResponsabilidade) {
                shouldShow = false;
            }
        }

        // Filtro de célula
        if (filtroCelula) {
            const celula = row.querySelector('[data-celula]').getAttribute('data-celula');
            if (celula !== filtroCelula) {
                shouldShow = false;
            }
        }

        // Marcar linha como filtrada ou não
        if (shouldShow) {
            row.removeAttribute('data-filtered-out');
        } else {
            row.setAttribute('data-filtered-out', '');
            row.style.display = 'none';
        }
    });

    // Resetar para a primeira página e atualizar paginação
    currentPage = 1;
    updateVisibleRows();
    updatePagination();
}

// Configurar eventos quando o DOM estiver carregado
document.addEventListener('DOMContentLoaded', function() {
    console.log('DOM carregado, configurando eventos...');
    
    // Configurar seletor de linhas por página
    const rowsPerPageSelect = document.getElementById('rowsPerPage');
    if (rowsPerPageSelect) {
        rowsPerPageSelect.addEventListener('change', function() {
            rowsPerPage = parseInt(this.value);
            currentPage = 1;
            updateVisibleRows();
            updatePagination();
        });
    }

    // Configurar pesquisa
    const searchInput = document.getElementById('searchInput');
    if (searchInput) {
        let timeoutId;
        searchInput.addEventListener('input', function() {
            clearTimeout(timeoutId);
            timeoutId = setTimeout(filtrarMilitantes, 300);
        });
    }

    // Configurar filtros
    document.querySelectorAll('.dropdown-item[data-filter]').forEach(item => {
        item.addEventListener('click', function(e) {
            e.preventDefault();
            
            const filter = this.getAttribute('data-filter');
            const celula = this.getAttribute('data-celula');
            
            // Resetar filtros anteriores
            if (filter === 'todos') {
                filtroAtual = 'todos';
                filtroResponsabilidade = null;
                filtroCelula = null;
            } else if (['financas', 'imprensa', 'quadro-orientador'].includes(filter)) {
                filtroAtual = 'todos';
                filtroResponsabilidade = filter === 'financas' ? 'Finanças' : 
                                       filter === 'imprensa' ? 'Imprensa' : 
                                       'Quadro-Orientador';
                filtroCelula = null;
            } else if (filter === 'celula') {
                filtroAtual = 'todos';
                filtroResponsabilidade = null;
                filtroCelula = celula;
            }
            
            filtrarMilitantes();
            
            // Atualizar texto do botão de filtro
            const filterText = this.textContent;
            const dropdownButton = document.querySelector('.dropdown-toggle');
            dropdownButton.innerHTML = `<i class="fas fa-filter me-2"></i>${filterText}`;
        });
    });

    console.log('Configurando modal de edição...');
    
    // Configuração do modal de edição
    const modalEditarMilitante = document.getElementById('modalEditarMilitante');
    
    if (modalEditarMilitante) {
        console.log('Modal encontrado, configurando eventos...');
        
        // Criar instância do modal Bootstrap
        const modalInstance = new bootstrap.Modal(modalEditarMilitante);
        console.log('Instância do modal criada:', modalInstance);
        
        // Configurar eventos quando o modal é mostrado
        modalEditarMilitante.addEventListener('show.bs.modal', function(event) {
            console.log('Modal sendo aberto...');
            
            // Obter o botão que disparou o modal
            const button = event.relatedTarget;
            const militanteId = button.getAttribute('data-militante-id');
            const militanteNome = button.getAttribute('data-militante-nome');
            
            console.log('ID do militante:', militanteId);
            console.log('Nome do militante:', militanteNome);
            
            // Atualizar o título do modal
            const modalTitle = modalEditarMilitante.querySelector('.modal-title');
            if (modalTitle) {
                modalTitle.innerHTML = `<i class="fas fa-user-edit me-2"></i>Editar ${militanteNome}`;
            }
            
            // Definir o ID do militante no campo hidden
            const idField = document.getElementById('edit_militante_id');
            if (idField) {
                idField.value = militanteId;
            }
            
            // Buscar dados do militante
            fetch(`/militantes/dados/${militanteId}`, {
                headers: {
                    'X-Requested-With': 'XMLHttpRequest'
                }
            })
            .then(response => {
                if (!response.ok) {
                    return response.json().then(data => {
                        throw new Error(data.message || `HTTP error! status: ${response.status}`);
                    });
                }
                return response.json();
            })
            .then(dados => {
                console.log('Dados do militante recebidos:', dados);
                
                if (!dados) {
                    throw new Error('Dados do militante não encontrados');
                }
                
                try {
                    // Preencher os campos do formulário
                    const campos = {
                        'edit_nome': dados.nome,
                        'edit_cpf': dados.cpf,
                        'edit_titulo_eleitoral': dados.titulo_eleitoral,
                        'edit_data_nascimento': dados.data_nascimento,
                        'edit_data_entrada': dados.data_entrada_oci,
                        'edit_data_efetivacao': dados.data_efetivacao_oci,
                        'edit_telefone1': dados.telefone1,
                        'edit_telefone2': dados.telefone2,
                        'edit_email': dados.email,
                        'edit_cep': dados.endereco?.cep,
                        'edit_estado': dados.endereco?.estado,
                        'edit_cidade': dados.endereco?.cidade,
                        'edit_bairro': dados.endereco?.bairro,
                        'edit_rua': dados.endereco?.rua,
                        'edit_numero': dados.endereco?.numero,
                        'edit_complemento': dados.endereco?.complemento,
                        'edit_profissao': dados.profissao,
                        'edit_regime_trabalho': dados.regime_trabalho,
                        'edit_empresa': dados.empresa,
                        'edit_contratante': dados.contratante,
                        'edit_instituicao_ensino': dados.instituicao_ensino,
                        'edit_tipo_instituicao': dados.tipo_instituicao,
                        'edit_sindicato': dados.sindicato,
                        'edit_cargo_sindical': dados.cargo_sindical,
                        'edit_central_sindical': dados.central_sindical,
                        'edit_estado_militante': dados.estado,
                        'edit_celula': dados.celula_id
                    };
                    
                    // Preencher cada campo se ele existir
                    Object.entries(campos).forEach(([id, valor]) => {
                        const campo = document.getElementById(id);
                        if (campo && valor !== undefined && valor !== null) {
                            campo.value = valor;
                        }
                    });
                    
                    // Checkbox de dirigente sindical
                    const checkDirigente = document.getElementById('edit_dirigente_sindical');
                    if (checkDirigente) {
                        checkDirigente.checked = dados.dirigente_sindical;
                    }
                    
                    // Checkboxes de responsabilidades
                    const responsabilidadesMap = {
                        'Finanças': 'edit_resp_1',
                        'Imprensa': 'edit_resp_2',
                        'Quadro-Orientador': 'edit_resp_4'
                    };
                    
                    console.log('Responsabilidades recebidas:', dados.responsabilidades);
                    
                    // Resetar todos os checkboxes primeiro
                    Object.values(responsabilidadesMap).forEach(id => {
                        const checkbox = document.getElementById(id);
                        if (checkbox) {
                            checkbox.checked = false;
                        }
                    });
                    
                    // Marcar os checkboxes baseado nas responsabilidades recebidas
                    if (Array.isArray(dados.responsabilidades)) {
                        dados.responsabilidades.forEach(resp => {
                            const checkboxId = responsabilidadesMap[resp];
                            if (checkboxId) {
                                const checkbox = document.getElementById(checkboxId);
                                if (checkbox) {
                                    checkbox.checked = true;
                                    console.log(`Marcando checkbox ${checkboxId} para responsabilidade ${resp}`);
                                }
                            }
                        });
                    }
                    
                    console.log('Formulário preenchido com sucesso');
                } catch (error) {
                    console.error('Erro ao preencher formulário:', error);
                    mostrarAlerta('Erro ao carregar dados do militante', 'danger');
                }
            })
            .catch(error => {
                console.error('Erro ao buscar dados:', error);
                mostrarAlerta('Erro ao carregar dados do militante', 'danger');
            });
        });

        // Envio do formulário de edição via AJAX
        const formEditarMilitante = document.getElementById('formEditarMilitante');
        if (formEditarMilitante) {
            formEditarMilitante.addEventListener('submit', function(e) {
                e.preventDefault();
                console.log('Enviando formulário de edição...');
                
                const formData = new FormData(this);
                
                // Coletar responsabilidades selecionadas
                const responsabilidades = [];
                if (document.getElementById('edit_resp_1').checked) responsabilidades.push('Finanças');
                if (document.getElementById('edit_resp_2').checked) responsabilidades.push('Imprensa');
                if (document.getElementById('edit_resp_4').checked) responsabilidades.push('Quadro-Orientador');
                
                formData.set('responsabilidades', JSON.stringify(responsabilidades));
                
                console.log('Responsabilidades enviadas:', responsabilidades);
                
                // Obter o CSRF token
                const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content');
                
                // Obter o ID do militante do campo hidden
                const militanteId = document.getElementById('edit_militante_id').value;
                
                if (!militanteId) {
                    console.error('ID do militante não encontrado!');
                    mostrarAlerta('Erro: ID do militante não encontrado', 'danger');
                    return;
                }
                
                // Garantir que o campo de endereço está correto
                const logradouro = formData.get('logradouro');
                if (logradouro) {
                    formData.set('rua', logradouro);
                    formData.delete('logradouro');
                }
                
                fetch(`/militantes/editar/${militanteId}`, {
                    method: 'POST',
                    body: formData,
                    headers: {
                        'X-Requested-With': 'XMLHttpRequest',
                        'X-CSRFToken': csrfToken
                    },
                    credentials: 'same-origin'
                })
                .then(response => {
                    console.log('Resposta recebida:', response);
                    if (!response.ok) {
                        return response.json().then(data => {
                            throw new Error(data.message || `HTTP error! status: ${response.status}`);
                        });
                    }
                    return response.json();
                })
                .then(data => {
                    console.log('Resposta processada:', data);
                    if (data.status === 'success') {
                        // Fechar o modal
                        bootstrap.Modal.getInstance(modalEditarMilitante).hide();
                        
                        // Mostrar mensagem de sucesso
                        mostrarAlerta(data.message, 'success');
                        
                        // Recarregar a página após um breve delay
                        setTimeout(() => {
                            location.reload();
                        }, 1500);
                    } else {
                        throw new Error(data.message || 'Erro ao salvar dados');
                    }
                })
                .catch(error => {
                    console.error('Erro ao enviar formulário:', error);
                    mostrarAlerta(`Erro ao salvar dados: ${error.message}`, 'danger');
                });
            });
        }

        // Limpar alertas quando o modal for fechado
        modalEditarMilitante.addEventListener('hidden.bs.modal', function () {
            const alerts = this.querySelectorAll('.alert');
            alerts.forEach(alert => alert.remove());
        });
    } else {
        console.error('Modal de edição não encontrado!');
    }

    // Envio do formulário via AJAX
    const formNovoMilitante = document.getElementById('formNovoMilitante');
    if (formNovoMilitante) {
        formNovoMilitante.addEventListener('submit', function(e) {
            e.preventDefault();
            
            const formData = new FormData(this);
            
            fetch(this.action, {
                method: 'POST',
                body: formData,
                headers: {
                    'X-Requested-With': 'XMLHttpRequest'
                }
            })
            .then(response => response.json())
            .then(data => {
                if (data.status === 'success') {
                    // Fechar o modal
                    const modal = bootstrap.Modal.getInstance(document.getElementById('modalNovoMilitante'));
                    modal.hide();
                    
                    // Limpar o formulário
                    formNovoMilitante.reset();
                    
                    // Adicionar o novo militante à tabela
                    const tbody = document.querySelector('#militantesTable tbody');
                    const tr = document.createElement('tr');
                    tr.setAttribute('data-militante', data.militante.id);
                    tr.setAttribute('data-filiado', data.militante.filiado ? 'sim' : 'nao');
                    
                    tr.innerHTML = `
                        <td data-nome="${data.militante.nome}">${data.militante.nome}</td>
                        <td data-cpf="${data.militante.cpf}">${data.militante.cpf}</td>
                        <td data-email="${data.militante.email}">${data.militante.email}</td>
                        <td data-telefone="${data.militante.telefone}">${data.militante.telefone}</td>
                        <td data-filiado="${data.militante.filiado}">
                            <span class="badge ${data.militante.filiado ? 'bg-success' : 'bg-secondary'}">
                                ${data.militante.filiado ? 'Sim' : 'Não'}
                            </span>
                        </td>
                        <td class="text-end">
                            <div class="btn-group">
                                <button type="button" 
                                   class="btn btn-sm btn-outline-primary"
                                   data-bs-toggle="modal"
                                   data-bs-target="#modalEditarMilitante"
                                   data-militante-id="${data.militante.id}"
                                   data-militante-nome="${data.militante.nome}"
                                   data-militante-cpf="${data.militante.cpf}"
                                   data-militante-email="${data.militante.email}"
                                   data-militante-telefone="${data.militante.telefone}"
                                   data-militante-endereco="${data.militante.endereco}"
                                   data-militante-filiado="${data.militante.filiado}"
                                   title="Editar">
                                    <i class="fas fa-edit"></i>
                                </button>
                                <button type="button" 
                                        class="btn btn-sm btn-outline-danger"
                                        data-bs-toggle="modal"
                                        data-bs-target="#deleteModal"
                                        data-militante-id="${data.militante.id}"
                                        data-militante-nome="${data.militante.nome}"
                                        title="Excluir">
                                    <i class="fas fa-trash"></i>
                                </button>
                            </div>
                        </td>
                    `;
                    
                    // Inserir no início da tabela
                    tbody.insertBefore(tr, tbody.firstChild);
                    
                    // Atualizar contador
                    const countElement = document.getElementById('countMilitantes');
                    countElement.textContent = parseInt(countElement.textContent) + 1;
                    
                    // Mostrar mensagem de sucesso
                    const alertDiv = document.createElement('div');
                    alertDiv.className = 'alert alert-success alert-dismissible fade show';
                    alertDiv.innerHTML = `
                        ${data.message}
                        <button type="button" class="btn-close" data-bs-dismiss="alert"></button>
                    `;
                    document.querySelector('.container').insertBefore(alertDiv, document.querySelector('.container').firstChild);
                } else {
                    // Mostrar erro
                    const alertDiv = document.createElement('div');
                    alertDiv.className = 'alert alert-danger alert-dismissible fade show';
                    alertDiv.innerHTML = `
                        ${data.message}
                        <button type="button" class="btn-close" data-bs-dismiss="alert"></button>
                    `;
                    document.querySelector('.modal-body').insertBefore(alertDiv, formNovoMilitante);
                }
            })
            .catch(error => {
                console.error('Erro:', error);
                // Mostrar erro genérico
                const alertDiv = document.createElement('div');
                alertDiv.className = 'alert alert-danger alert-dismissible fade show';
                alertDiv.innerHTML = `
                    Erro ao cadastrar militante. Tente novamente.
                    <button type="button" class="btn-close" data-bs-dismiss="alert"></button>
                `;
                document.querySelector('.modal-body').insertBefore(alertDiv, formNovoMilitante);
            });
        });
    }

    // Máscara para CPF
    const cpfInputs = document.querySelectorAll('input[name="cpf"]');
    cpfInputs.forEach(input => {
        input.addEventListener('input', function(e) {
            let value = e.target.value.replace(/\D/g, '');
            if (value.length <= 11) {
                value = value.replace(/(\d{3})(\d)/, '$1.$2');
                value = value.replace(/(\d{3})(\d)/, '$1.$2');
                value = value.replace(/(\d{3})(\d{1,2})$/, '$1-$2');
                e.target.value = value;
            }
        });
    });

    // Máscara para telefone
    const telefoneInputs = document.querySelectorAll('input[name="telefone1"], input[name="telefone2"]');
    telefoneInputs.forEach(input => {
        input.addEventListener('input', function(e) {
            let value = e.target.value.replace(/\D/g, '');
            if (value.length <= 11) {
                value = value.replace(/(\d{2})(\d)/, '($1) $2');
                value = value.replace(/(\d{4,5})(\d{4})$/, '$1-$2');
                e.target.value = value;
            }
        });
    });

    // Limpar formulário e alertas quando o modal for fechado
    const modalNovoMilitante = document.getElementById('modalNovoMilitante');
    if (modalNovoMilitante) {
        modalNovoMilitante.addEventListener('hidden.bs.modal', function () {
            formNovoMilitante.reset();
            const alerts = this.querySelectorAll('.alert');
            alerts.forEach(alert => alert.remove());
        });
    }

    // Configuração do modal de exclusão
    const deleteModal = document.getElementById('deleteModal');
    if (deleteModal) {
        deleteModal.addEventListener('show.bs.modal', function(event) {
            const button = event.relatedTarget;
            const militanteId = button.getAttribute('data-militante-id');
            const militanteNome = button.getAttribute('data-militante-nome');
            
            document.getElementById('militanteNome').textContent = militanteNome;
            document.getElementById('deleteForm').action = `/militantes/excluir/${militanteId}`;
        });
    }

    // Ordenação
    const headers = document.querySelectorAll('#militantesTable th[data-sort]');
    headers.forEach(header => {
        header.addEventListener('click', function() {
            const column = this.getAttribute('data-sort');
            const tbody = document.querySelector('#militantesTable tbody');
            const rows = Array.from(tbody.querySelectorAll('tr'));
            const isAsc = !this.classList.contains('sort-asc');
            
            // Remover classes de ordenação de todos os headers
            headers.forEach(h => {
                h.classList.remove('sort-asc', 'sort-desc');
                h.querySelector('i').className = 'fas fa-sort';
            });
            
            // Adicionar classe de ordenação ao header clicado
            this.classList.add(isAsc ? 'sort-asc' : 'sort-desc');
            this.querySelector('i').className = `fas fa-sort-${isAsc ? 'up' : 'down'}`;
            
            // Ordenar linhas
            rows.sort((a, b) => {
                const aVal = a.querySelector(`td[data-${column}]`).getAttribute(`data-${column}`);
                const bVal = b.querySelector(`td[data-${column}]`).getAttribute(`data-${column}`);
                return isAsc ? aVal.localeCompare(bVal) : bVal.localeCompare(aVal);
            });
            
            // Reposicionar linhas
            rows.forEach(row => tbody.appendChild(row));
        });
    });

    // Exportar para CSV
    const btnExportar = document.getElementById('btnExportar');
    if (btnExportar) {
        btnExportar.addEventListener('click', function() {
            const rows = document.querySelectorAll('#militantesTable tbody tr:not([style*="display: none"])');
            const headers = ['Nome', 'CPF', 'Email', 'Telefone', 'Filiado'];
            let csv = headers.join(',') + '\n';
            
            rows.forEach(row => {
                const cols = row.querySelectorAll('td');
                const values = [
                    cols[0].textContent,
                    cols[1].textContent,
                    cols[2].textContent,
                    cols[3].textContent,
                    cols[4].textContent.trim()
                ].map(val => `"${val}"`);
                csv += values.join(',') + '\n';
            });
            
            const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });
            const link = document.createElement('a');
            link.href = URL.createObjectURL(blob);
            link.setAttribute('download', 'militantes.csv');
            document.body.appendChild(link);
            link.click();
            document.body.removeChild(link);
        });
    }

    // Configurar máscaras de input
    // CEP
    const cepInputs = document.querySelectorAll('input[name="cep"]');
    cepInputs.forEach(input => {
        input.addEventListener('input', function(e) {
            let value = e.target.value.replace(/\D/g, '');
            if (value.length <= 8) {
                value = value.replace(/(\d{5})(\d)/, '$1-$2');
                e.target.value = value;
            }
        });

        // Buscar endereço pelo CEP
        input.addEventListener('blur', function(e) {
            const cep = e.target.value.replace(/\D/g, '');
            if (cep.length === 8) {
                fetch(`https://viacep.com.br/ws/${cep}/json/`)
                    .then(response => response.json())
                    .then(data => {
                        if (!data.erro) {
                            const form = input.closest('form');
                            form.querySelector('input[name="logradouro"]').value = data.logradouro;
                            form.querySelector('input[name="bairro"]').value = data.bairro;
                            form.querySelector('input[name="cidade"]').value = data.localidade;
                            form.querySelector('select[name="estado"]').value = data.uf;
                        }
                    });
            }
        });
    });

    // Título Eleitoral
    const tituloInputs = document.querySelectorAll('input[name="titulo_eleitoral"]');
    tituloInputs.forEach(input => {
        input.addEventListener('input', function(e) {
            let value = e.target.value.replace(/\D/g, '');
            if (value.length <= 12) {
                value = value.replace(/(\d{4})(\d)/, '$1 $2');
                value = value.replace(/(\d{4})(\d)/, '$1 $2');
                e.target.value = value;
            }
        });
    });

    // Inicializar paginação
    updateVisibleRows();
    updatePagination();
});

// Função para mostrar alertas
function mostrarAlerta(mensagem, tipo) {
    // Criar o elemento de alerta
    const alertDiv = document.createElement('div');
    alertDiv.className = `alert alert-${tipo} alert-dismissible fade show position-fixed top-0 start-50 translate-middle-x mt-3`;
    alertDiv.style.zIndex = '9999';
    alertDiv.innerHTML = `
        ${mensagem}
        <button type="button" class="btn-close" data-bs-dismiss="alert"></button>
    `;
    
    // Adicionar o alerta ao corpo do documento
    document.body.appendChild(alertDiv);
    
    // Configurar o Bootstrap alert
    const bsAlert = new bootstrap.Alert(alertDiv);
    
    // Remover o alerta após 3 segundos
    setTimeout(() => {
        bsAlert.close();
    }, 3000);
} 