/**
 * ZLETS - Empresas.js
 * Inicialización de DataTables y gestión AJAX de empresas
 */

document.addEventListener('DOMContentLoaded', function() {
    initEmpresasDataTable();
});

/**
 * Inicializar DataTables con configuración en español y estilos dark
 */
function initEmpresasDataTable() {
    const table = document.getElementById('tabla-empresas');
    if (!table) return;

    $('#tabla-empresas').DataTable({
        language: {
            processing:     "Procesando...",
            search:         "",
            searchPlaceholder: "Buscar empresa, RUC...",
            lengthMenu:     "Mostrar _MENU_ registros",
            info:           "Mostrando _START_ a _END_ de _TOTAL_ empresas",
            infoEmpty:      "No hay empresas registradas",
            infoFiltered:   "(filtrado de _MAX_ totales)",
            loadingRecords: "Cargando...",
            zeroRecords:    "No se encontraron resultados",
            emptyTable:     "No hay empresas registradas",
            paginate: {
                first:    '<i class="fas fa-angle-double-left"></i>',
                last:     '<i class="fas fa-angle-double-right"></i>',
                next:     '<i class="fas fa-chevron-right"></i>',
                previous: '<i class="fas fa-chevron-left"></i>'
            },
        },
        pageLength: 10,
        lengthMenu: [[10, 25, 50, -1], [10, 25, 50, "Todos"]],
        order: [[0, 'asc']],
        columnDefs: [
            { orderable: false, targets: [7] }, // Acciones column
            { className: 'text-center', targets: [4, 6, 7] },
            { className: 'text-right', targets: [5] },
        ],
        dom: '<"dt-header flex flex-col sm:flex-row items-center justify-between gap-3 mb-4"<"dt-length"l><"dt-search"f>>rt<"dt-footer flex flex-col sm:flex-row items-center justify-between gap-3 mt-4"<"dt-info"i><"dt-paging"p>>',
        drawCallback: function() {
            // Aplicar estilos custom después de cada redraw
            styleDataTableElements();
        },
        initComplete: function() {
            styleDataTableElements();
        }
    });
}

/**
 * Aplicar estilos custom a los elementos generados por DataTables
 */
function styleDataTableElements() {
    // Search input
    const searchInput = document.querySelector('.dt-search input');
    if (searchInput) {
        searchInput.classList.add('input-glass');
        searchInput.style.minWidth = '250px';
    }

    // Length select
    const lengthSelect = document.querySelector('.dt-length select');
    if (lengthSelect) {
        lengthSelect.classList.add('input-glass');
    }
}

/**
 * Activar/Desactivar empresa vía AJAX con confirmación SweetAlert
 */
function toggleEstadoEmpresa(id, nombre, estadoActual) {
    const accion = estadoActual === 1 ? 'desactivar' : 'activar';
    const color  = estadoActual === 1 ? '#ef4444' : '#10b981';
    const icon   = estadoActual === 1 ? 'warning' : 'question';

    Swal.fire({
        title: `¿${accion.charAt(0).toUpperCase() + accion.slice(1)} empresa?`,
        html: `<p class="text-sm text-gray-300">¿Desea ${accion} la empresa <strong class="text-white">${nombre}</strong>?</p>
               ${estadoActual === 1 ? '<p class="text-xs text-gray-500 mt-2"><i class="fas fa-info-circle mr-1"></i>La empresa no aparecerá en los selectores pero sus letras se mantendrán.</p>' : ''}`,
        icon: icon,
        showCancelButton: true,
        confirmButtonColor: color,
        cancelButtonColor: '#64748b',
        confirmButtonText: `Sí, ${accion}`,
        cancelButtonText: 'Cancelar',
        background: 'rgba(30, 42, 58, 0.98)',
        color: '#fff',
    }).then((result) => {
        if (result.isConfirmed) {
            const formData = new FormData();
            formData.append('id', id);

            fetch(BASE_URL + '?c=empresas&a=eliminar', {
                method: 'POST',
                body: formData,
                headers: {
                    'X-Requested-With': 'XMLHttpRequest'
                }
            })
            .then(res => res.json())
            .then(data => {
                if (data.success) {
                    showToast('success', data.mensaje);
                    // Reload after a brief delay to show the toast
                    setTimeout(() => location.reload(), 800);
                } else {
                    showToast('error', data.mensaje || 'Error al cambiar estado.');
                }
            })
            .catch(() => {
                showToast('error', 'Error de conexión.');
            });
        }
    });
}

/**
 * Eliminar empresa permanentemente vía AJAX con confirmación SweetAlert
 */
function eliminarEmpresa(id, nombre) {
    Swal.fire({
        title: '¿Eliminar empresa permanentemente?',
        html: `<p class="text-sm text-gray-300">Se eliminará permanentemente la empresa <strong class="text-white">${nombre}</strong>.</p>
               <p class="text-xs text-red-400 mt-2"><i class="fas fa-exclamation-triangle mr-1"></i>Esta acción no se puede deshacer.</p>`,
        icon: 'warning',
        showCancelButton: true,
        confirmButtonColor: '#ef4444',
        cancelButtonColor: '#64748b',
        confirmButtonText: 'Sí, eliminar',
        cancelButtonText: 'Cancelar',
        background: 'rgba(30, 42, 58, 0.98)',
        color: '#fff',
    }).then((result) => {
        if (result.isConfirmed) {
            const formData = new FormData();
            formData.append('id', id);

            fetch(BASE_URL + '?c=empresas&a=borrar', {
                method: 'POST',
                body: formData,
                headers: {
                    'X-Requested-With': 'XMLHttpRequest'
                }
            })
            .then(res => res.json())
            .then(data => {
                if (data.success) {
                    showToast('success', data.mensaje);
                    setTimeout(() => location.reload(), 800);
                } else {
                    showToast('error', data.mensaje || 'Error al eliminar empresa.');
                }
            })
            .catch(() => {
                showToast('error', 'Error de conexión.');
            });
        }
    });
}
