<?php
session_start();
if (!isset($_SESSION['rol']) || !in_array($_SESSION['rol'], ['contabilidad', 'adminTi'])) {
  header('Location: ../../index.php');
  exit;
}
?>
<!DOCTYPE html>
<html lang="es">
<head>
  <meta charset="UTF-8" />
  <title>Bajas - Contabilidad</title>
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <!-- Bootstrap + FontAwesome + DataTables -->
  <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" />
  <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet" />
  <link href="https://cdn.datatables.net/1.13.6/css/dataTables.bootstrap5.min.css" rel="stylesheet" />
  <link href="../assets/css/recruiter.css" rel="stylesheet" />
  <link href="https://cdn.jsdelivr.net/npm/sweetalert2@11/dist/sweetalert2.min.css" rel="stylesheet" />
  <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
  <style>
    /* Color naranja para filas de pre-baja */
    .prebaja-naranja {
      background-color: #ffb347 !important; /* Naranja suave */
      color: #333 !important;
    }
  </style>
</head>
<body class="bg-light">

<div class="bg-light">
  <?php include '../includes/sidebar.php'; ?>
  <div class="main-content flex-grow-1 px-4 py-4">
    <?php include '../includes/topbar.php'; ?>

    <div class="container-fluid">
      <h2 class="mb-4 text-danger"><i class="fas fa-user-minus me-2"></i>Colaboradores Inactivos</h2>
      <div class="mb-3 d-flex justify-content-between align-items-center">
        <div>
          <button id="btnExportarBajas" class="btn btn-success" disabled>
            <i class="fas fa-file-excel me-2"></i>Exportar bajas seleccionadas
          </button>
          <button id="btnExportarExcelContaBaja" class="btn btn-info ms-2" disabled>
            <i class="fas fa-file-excel me-2"></i>Exportar Excel Contpaqi
          </button>
        </div>
        <div>
          <button id="btnPrebaja" class="btn btn-warning" disabled>
            <i class="fas fa-hourglass-half me-2"></i>Prebaja
          </button>
          <button id="btnMarcarBajasCompletadas" class="btn btn-primary" disabled>
            <i class="fas fa-check me-2"></i>Marcar bajas completadas
          </button>
        </div>
      </div>
      <div id="loaderExportContaBaja" class="d-none text-center my-3">
        <div class="spinner-border text-info" role="status">
          <span class="visually-hidden">Generando archivo...</span>
        </div>
        <div class="mt-2">Generando archivo Excel, por favor espera...</div>
      </div>
      <div class="table-responsive">
        <table id="tablaBajas" class="table table-striped table-bordered table-hover align-middle text-center">
          <thead class="table-dark">
            <tr>
              <th><input type="checkbox" id="chk-todos-bajas"></th>
              <th>Nombre</th>
              <th>CURP</th>
              <th>RFC</th>
              <th>NSS</th>
              <th>PDV</th>
              <th>Puesto</th>
              <th>Fecha de Baja</th>
              <th>Pago Días Laborados</th>
              <th>Días Laborados</th>
              <th>Folio Prebaja IDSE</th>
              <th>Fecha Prebaja IDSE</th>
              <th>Estatus Contabilidad</th>
              <th>Folio baja IDSE</th>
              <th>Fecha baja IDSE</th>
            </tr>
          </thead>
          <tbody>
            <!-- Las filas se llenarán por JS -->
          </tbody>
        </table>
      </div>
      <!-- Modal para datos de baja IDSE -->
      <div class="modal fade" id="modalDatosBaja" tabindex="-1" aria-labelledby="modalDatosBajaLabel" aria-hidden="true">
        <div class="modal-dialog">
          <div class="modal-content">
            <div class="modal-header">
              <h5 class="modal-title" id="modalDatosBajaLabel">Datos de baja IDSE</h5>
              <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Cerrar"></button>
            </div>
            <div class="modal-body">
              <div class="mb-3">
                <label for="inputFolioIDSEBaja" class="form-label">Folio baja IDSE</label>
                <input type="text" class="form-control" id="inputFolioIDSEBaja" required>
              </div>
              <div class="mb-3">
                <label for="inputFechaIDSEBaja" class="form-label">Fecha de Baja IDSE</label>
                <input type="date" class="form-control" id="inputFechaIDSEBaja" required>
              </div>
            </div>
            <div class="modal-footer">
              <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancelar</button>
              <button type="button" class="btn btn-primary" id="btnConfirmarDatosBaja">Guardar y marcar como completado</button>
              <button type="button" class="btn btn-warning d-none" id="btnConfirmarPrebaja">Guardar Prebaja</button>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

<!-- JS y dependencias -->
<!-- <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script> -->
<script src="https://code.jquery.com/jquery-3.7.0.min.js"></script>
<script src="https://cdn.datatables.net/1.13.6/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/1.13.6/js/dataTables.bootstrap5.min.js"></script>
<script type="module" src="../assets/js/contabilidad/bajas.js"></script>
<script>
  $(document).ready(function () {
    // Llenar la tabla por AJAX
    fetch('../../backend/contabilidad/get_bajas.php')
      .then(res => res.json())
      .then(data => {
        // Adaptar para la respuesta con { pendientes: [...], bajas: [...] }
        let rows = [];
        if (Array.isArray(data)) {
          rows = data;
        } else if (data && Array.isArray(data.data)) {
          rows = data.data;
        } else if (data && Array.isArray(data.pendientes) && Array.isArray(data.bajas)) {
          rows = [...data.pendientes, ...data.bajas];
        } else if (data && data.error) {
          Swal.fire({
            icon: 'error',
            title: 'Error al obtener bajas',
            text: data.error,
            timer: 8000,
            timerProgressBar: true,
            showConfirmButton: true
          });
          return;
        } else {
          Swal.fire({
            icon: 'error',
            title: 'Error inesperado',
            text: 'La respuesta del servidor no es válida.',
            timer: 8000,
            timerProgressBar: true,
            showConfirmButton: true
          });
          return;
        }
        const tbody = document.querySelector('#tablaBajas tbody');
        tbody.innerHTML = '';
        // Separar y ordenar los datos según la lógica solicitada
        // 1. Pendientes sin folio/fecha de pre-baja (amarillo)
        // 2. Pendientes con folio y fecha de pre-baja válidos (naranja)
        // 3. Bajas con folio y fecha de baja (rojo)
        // 4. Otros
        const esPendiente = row => (row.estatusContaBaja || '').trim().toLowerCase() === 'pendiente';
        const folioPrebajaValido = row => row.Folio_pre_baja_idse && row.Folio_pre_baja_idse.trim() !== '' && row.Folio_pre_baja_idse.trim().toLowerCase() !== 'por definir';
        const fechaPrebajaValida = row => row.Fecha_pre_baja && row.Fecha_pre_baja !== '0000-00-00' && row.Fecha_pre_baja.trim() !== '' && row.Fecha_pre_baja.trim().toLowerCase() !== 'por definir';
        const folioBajaValido = row => row.Folio_idse_baja && row.Folio_idse_baja.trim() !== '' && row.Folio_idse_baja.trim().toLowerCase() !== 'por definir';
        const fechaBajaValida = row => row.Fecha_baja_idse && row.Fecha_baja_idse !== '0000-00-00' && row.Fecha_baja_idse.trim() !== '' && row.Fecha_baja_idse.trim().toLowerCase() !== 'por definir';

        // 1. Pendientes sin folio/fecha de pre-baja (amarillo)
        const pendientesSinPrebaja = rows.filter(row => esPendiente(row) && (!folioPrebajaValido(row) || !fechaPrebajaValida(row)));
        // 2. Pendientes con folio y fecha de pre-baja válidos (naranja)
        const pendientesConPrebaja = rows.filter(row => esPendiente(row) && folioPrebajaValido(row) && fechaPrebajaValida(row));
        // 3. Bajas con folio y fecha de baja (rojo)
        const bajasConFolioYFecha = rows.filter(row => {
          const estatus = (row.estatusContaBaja || '').toLowerCase().trim();
          return estatus === 'baja' && folioBajaValido(row) && fechaBajaValida(row);
        }).sort((a, b) => {
          // Ordenar por Fecha_baja_idse descendente (más reciente primero)
          // Usar comparación de string invertido para mantener formato DD/MM/AAAA
          const fechaA = a.Fecha_baja_idse || '';
          const fechaB = b.Fecha_baja_idse || '';
          return fechaB.localeCompare(fechaA);
        });
        // 4. Otros
        const otros = rows.filter(row => {
          const estatus = (row.estatusContaBaja || '').toLowerCase();
          return !(esPendiente(row) || (estatus === 'baja' && folioBajaValido(row) && fechaBajaValida(row)));
        });
        // Renderizar en el orden solicitado
        const renderRows = [...pendientesSinPrebaja, ...pendientesConPrebaja, ...bajasConFolioYFecha, ...otros];
        renderRows.forEach(row => {
          const nombreCompleto = `${row.NOMBRES} ${row['APELLIDO PATERNO']} ${row['APELLIDO MATERNO']}`.trim();
          const pdv = row['DEPARTAMENTO INTERNO'] || 'No disponible';
          const estatus = row.estatusContaBaja || 'Sin estatus';
          // Formatear fechas como en altas.php (DD/MM/AAAA)
          let fechaBaja = row['Fecha Baja'];
          if (!fechaBaja || fechaBaja === '0000-00-00') {
            fechaBaja = '';
          } else {
            fechaBaja = fechaBaja.split('-').reverse().join('/');
          }
          let folioPrebaja = row.Folio_pre_baja_idse;
          folioPrebaja = (folioPrebaja && folioPrebaja.trim() !== '') ? folioPrebaja : 'Por definir';
          let fechaPrebaja = row.Fecha_pre_baja;
          if (!fechaPrebaja || fechaPrebaja === '0000-00-00') {
            fechaPrebaja = 'Por definir';
          } else {
            fechaPrebaja = fechaPrebaja.split('-').reverse().join('/');
          }
          let folioBaja = row.Folio_idse_baja;
          folioBaja = (folioBaja && folioBaja.trim() !== '') ? folioBaja : 'Por definir';
          let fechaBajaIDSE = row.Fecha_baja_idse;
          if (!fechaBajaIDSE || fechaBajaIDSE === '0000-00-00') {
            fechaBajaIDSE = 'Por definir';
          } else {
            fechaBajaIDSE = fechaBajaIDSE.split('-').reverse().join('/');
          }
          // Lógica de color de fila con clases Bootstrap (invertido)
          let claseFila = '';
          if (esPendiente(row) && folioPrebajaValido(row) && fechaPrebajaValida(row)) {
            claseFila = 'table-warning'; // Amarillo Bootstrap para pre-baja
          } else if ((row.estatusContaBaja || '').trim().toLowerCase() === 'baja') {
            claseFila = 'table-danger text-white';
          } // Los pendientes sin pre-baja quedan sin clase
          const pagoDiasLaborados = (row.pagoDiasLaborados === null || row.pagoDiasLaborados === undefined || row.pagoDiasLaborados === '') ? '' : row.pagoDiasLaborados;
          const diasLaborados = (row.diasLaborados === null || row.diasLaborados === undefined || row.diasLaborados === '') ? '' : row.diasLaborados;
          tbody.innerHTML += `
            <tr class="fila-click ${claseFila}" data-curp="${row.CURP}">
              <td><input type="checkbox" class="chk-export-baja" value="${row.CURP}"></td>
              <td>${nombreCompleto}</td>
              <td>${row.CURP}</td>
              <td>${row.RFC}</td>
              <td>${row.NSS}</td>
              <td>${(pdv || '').replace(/^GRP\s*/, '')}</td>
              <td>${row.PUESTO}</td>
              <td>${fechaBaja}</td>
              <td>${pagoDiasLaborados}</td>
              <td>${diasLaborados}</td>
              <td>${folioPrebaja}</td>
              <td>${fechaPrebaja}</td>
              <td><span class="badge bg-secondary text-uppercase">${estatus.replace('_', ' ')}</span></td>
              <td>${folioBaja}</td>
              <td>${fechaBajaIDSE}</td>
            </tr>
          `;
        });
        $('#tablaBajas').DataTable({
          language: {
            url: 'https://cdn.datatables.net/plug-ins/1.13.6/i18n/es-ES.json'
          },
          pageLength: 10
        });
      })
      .catch(err => {
        Swal.fire({
          icon: 'error',
          title: 'Error de conexión',
          text: 'No se pudo obtener la información de bajas.\n' + (err.message || err),
          timer: 8000,
          timerProgressBar: true,
          showConfirmButton: true
        });
      });

    // Selección de todos
    $(document).on('change', '#chk-todos-bajas', function() {
      $('.chk-export-baja').prop('checked', this.checked);
      $('#btnExportarBajas').prop('disabled', $('.chk-export-baja:checked').length === 0);
      habilitarBotonMarcarBajas();
    });
    // Habilitar botón si hay selección
    $(document).on('change', '.chk-export-baja', function() {
      $('#btnExportarBajas').prop('disabled', $('.chk-export-baja:checked').length === 0);
      habilitarBotonMarcarBajas();
      habilitarBotonPrebaja();
    });
    // Habilitar/deshabilitar botón de Prebaja
    function habilitarBotonPrebaja() {
      const seleccionados = $('.chk-export-baja:checked');
      if (seleccionados.length === 0) {
        $('#btnPrebaja').prop('disabled', true);
        return;
      }
      // Si alguno de los seleccionados tiene estatus BAJA, deshabilitar
      let algunoEsBaja = false;
      seleccionados.each(function() {
        const fila = $(this).closest('tr');
        const estatus = fila.find('td').eq(10).text().trim().toLowerCase();
        if (estatus === 'baja') {
          algunoEsBaja = true;
          return false; // break
        }
      });
      if (algunoEsBaja) {
        $('#btnPrebaja').prop('disabled', true);
        return;
      }
      // Si alguno de los seleccionados ya tiene folio de pre-baja, deshabilitar el botón
      let algunoConPrebaja = false;
      seleccionados.each(function() {
        const fila = $(this).closest('tr');
        const folioPrebaja = fila.find('td').eq(10).text().trim().toLowerCase();
        if (folioPrebaja && folioPrebaja !== 'por definir' && folioPrebaja !== '') {
          algunoConPrebaja = true;
          return false; // break
        }
      });
      $('#btnPrebaja').prop('disabled', algunoConPrebaja);
    }
    // Habilitar/deshabilitar botón de marcar bajas completadas
    function habilitarBotonMarcarBajas() {
      const seleccionadosPendientes = $('.chk-export-baja:checked').filter(function(){
        return $(this).closest('tr').find('span.badge').text().trim().toLowerCase() === 'pendiente';
      });
      const seleccionados = $('.chk-export-baja:checked');
      // Si alguno de los seleccionados tiene estatus BAJA, deshabilitar
      let algunoEsBaja = false;
      seleccionados.each(function() {
        const fila = $(this).closest('tr');
        const estatus = fila.find('td').eq(10).text().trim().toLowerCase();
        if (estatus === 'baja') {
          algunoEsBaja = true;
          return false; // break
        }
      });
      if (algunoEsBaja) {
        $('#btnMarcarBajasCompletadas').prop('disabled', true);
        $('#btnPrebaja').prop('disabled', true);
        return;
      }
      // Si alguno de los seleccionados tiene folio de baja IDSE, deshabilitar el botón
      let algunoConFolioBaja = false;
      seleccionadosPendientes.each(function() {
        const fila = $(this).closest('tr');
        const folioBaja = fila.find('td').eq(13).text().trim().toLowerCase();
        if (folioBaja && folioBaja !== 'por definir' && folioBaja !== '') {
          algunoConFolioBaja = true;
          return false; // break
        }
      });

      // NUEVA LÓGICA: Solo habilitar si TODOS los seleccionados pendientes tienen FOLIO PREBAJA IDSE válido
      let todosConFolioPrebaja = true;
      seleccionadosPendientes.each(function() {
        const fila = $(this).closest('tr');
        const folioPrebaja = fila.find('td').eq(10).text().trim().toLowerCase();
        if (!folioPrebaja || folioPrebaja === 'por definir' || folioPrebaja === '') {
          todosConFolioPrebaja = false;
          return false; // break
        }
      });

      // El botón solo se habilita si hay seleccionados pendientes, ninguno tiene folio de baja IDSE, y TODOS tienen folio de prebaja válido
      $('#btnMarcarBajasCompletadas').prop('disabled', seleccionadosPendientes.length === 0 || algunoConFolioBaja || !todosConFolioPrebaja);
      habilitarBotonPrebaja();
    }
    // Exportar bajas seleccionadas
    $('#btnExportarBajas').on('click', function() {
      const seleccionados = $('.chk-export-baja:checked').map(function(){ return this.value; }).get();
      if (seleccionados.length === 0) return;
      const form = $('<form>', {
        method: 'POST',
        action: '../../backend/contabilidad/exportar_bajas_detalle.php',
        target: '_blank'
      });
      form.append($('<input>', {
        type: 'hidden',
        name: 'curps',
        value: JSON.stringify(seleccionados)
      }));
      $('body').append(form);
      form.submit();
      form.remove();
    });
    // Habilitar botón de exportar excel conta baja si hay selección
    $(document).on('change', '.chk-export-baja, #chk-todos-bajas', function() {
      $('#btnExportarExcelContaBaja').prop('disabled', $('.chk-export-baja:checked').length === 0);
    });
    // Exportar excel conta baja SOLO seleccionados (fix: obtener los seleccionados del DOM, no del DataTable)
    $('#btnExportarExcelContaBaja').on('click', function() {
      // Buscar todos los checkboxes seleccionados en el DOM (no solo los visibles)
      const seleccionados = [];
      $('#tablaBajas tbody input.chk-export-baja:checked').each(function() {
        seleccionados.push($(this).val());
      });
      if (seleccionados.length === 0) {
        alert('Selecciona al menos un colaborador para exportar.');
        return;
      }
      $('#loaderExportContaBaja').removeClass('d-none');
      setTimeout(() => {
        const form = $('<form>', {
          method: 'POST',
          action: '../../backend/contabilidad/plantillas/exportar_excel_conta_baja.php',
          target: '_blank'
        });
        form.append($('<input>', {
          type: 'hidden',
          name: 'curps',
          value: JSON.stringify(seleccionados)
        }));
        $('body').append(form);
        form.submit();
        form.remove();
        setTimeout(() => { $('#loaderExportContaBaja').addClass('d-none'); }, 2000);
      }, 200);
    });
    // Marcar bajas completadas
    $('#btnMarcarBajasCompletadas').on('click', function() {
      const seleccionadosPendientes = $('.chk-export-baja:checked').filter(function(){
        return $(this).closest('tr').find('span.badge').text().trim().toLowerCase() === 'pendiente';
      }).map(function(){ return this.value; }).get();
      if (seleccionadosPendientes.length === 0) return;
      // Limpiar campos del modal
      $('#inputFolioIDSEBaja').val('');
      $('#inputFechaIDSEBaja').val('');
      // Mostrar modal
      const modal = new bootstrap.Modal(document.getElementById('modalDatosBaja'));
      modal.show();
      // Guardar los seleccionados en data temporal
      $('#modalDatosBaja').data('curps', seleccionadosPendientes);
    });
    // Botón Prebaja
    $('#btnPrebaja').on('click', function() {
      const seleccionados = $('.chk-export-baja:checked').map(function(){ return this.value; }).get();
      if (seleccionados.length === 0) return;
      // Limpiar campos del modal
      $('#inputFolioIDSEBaja').val('');
      $('#inputFechaIDSEBaja').val('');
      // Cambiar título y botones
      $('#modalDatosBajaLabel').text('Datos de Prebaja IDSE');
      $('#btnConfirmarDatosBaja').addClass('d-none');
      $('#btnConfirmarPrebaja').removeClass('d-none');
      // Mostrar modal
      const modal = new bootstrap.Modal(document.getElementById('modalDatosBaja'));
      modal.show();
      // Guardar los seleccionados en data temporal
      $('#modalDatosBaja').data('curps', seleccionados);
    });
    // Confirmar y guardar datos de baja
    $('#btnConfirmarDatosBaja').on('click', function() {
      const seleccionadosPendientes = $('#modalDatosBaja').data('curps') || [];
      const folio = $('#inputFolioIDSEBaja').val().trim();
      const fecha = $('#inputFechaIDSEBaja').val();
      if (!folio || !fecha) {
        alert('Por favor ingresa el folio y la fecha de baja IDSE.');
        return;
      }
      if (!confirm('¿Está seguro de marcar como completadas las bajas seleccionadas?')) return;
      $.ajax({
        url: '../../backend/contabilidad/actualizar_estatus_baja.php',
        method: 'POST',
        data: {
          curps: JSON.stringify(seleccionadosPendientes),
          folio: folio,
          fecha: fecha
        },
        success: function(resp) {
          location.reload();
        },
        error: function() {
          alert('Error al actualizar el estatus de las bajas.');
        }
      });
    });
    // Confirmar y guardar Prebaja
    $('#btnConfirmarPrebaja').on('click', function() {
      const seleccionados = $('#modalDatosBaja').data('curps') || [];
      const folio = $('#inputFolioIDSEBaja').val().trim();
      const fecha = $('#inputFechaIDSEBaja').val();
      // Validación visual de datos enviados
      console.log('PREBAJA ENVIANDO:', { seleccionados, folio, fecha });
      if (!folio || !fecha) {
        alert('Por favor ingresa el folio y la fecha de Prebaja IDSE.');
        return;
      }
      if (!confirm('¿Está seguro de guardar la Prebaja para los seleccionados?')) return;
      $.ajax({
        url: '../../backend/contabilidad/guardar_prebaja.php',
        method: 'POST',
        data: {
          curps: JSON.stringify(seleccionados),
          folio: folio,
          fecha: fecha
        },
        success: function(resp) {
          // Agregar SweetAlert para mostrar el éxito y dar tiempo de revisar la consola
          // Incluir SweetAlert2 desde CDN si no está incluido
          if (typeof Swal === 'undefined') {
            var script = document.createElement('script');
            script.src = 'https://cdn.jsdelivr.net/npm/sweetalert2@11';
            document.head.appendChild(script);
          }
          // Reemplazar location.reload() por SweetAlert
          Swal.fire({
            icon: 'success',
            title: 'Prebaja guardada',
            text: 'La pre-baja se guardó correctamente. La página se recargará en 5 segundos...',
            timer: 5000,
            timerProgressBar: true,
            showConfirmButton: false
          });
          setTimeout(function(){ location.reload(); }, 5000);
        },
        error: function(xhr) {
          Swal.fire({
            icon: 'error',
            title: 'Error al guardar la Prebaja',
            text: xhr.responseText || 'Ocurrió un error inesperado. Revisa la consola y el error_log.txt',
            timer: 8000,
            timerProgressBar: true,
            showConfirmButton: true
          });
          console.error('Error al guardar la Prebaja:', xhr.responseText);
        }
      });
    });
    // Al abrir modal para bajas completadas, ajustar botones
    $('#btnMarcarBajasCompletadas').on('click', function() {
      // Cambiar título y botones
      $('#modalDatosBajaLabel').text('Datos de baja IDSE');
      $('#btnConfirmarDatosBaja').removeClass('d-none');
      $('#btnConfirmarPrebaja').addClass('d-none');
    });
    // Permitir seleccionar el checkbox haciendo clic en la celda del nombre o la celda del checkbox
    $(document).on('click', '#tablaBajas tbody td', function(e) {
      const colIndex = $(this).index();
      // Solo aplicar en la columna del checkbox (0) o del nombre (1)
      if (colIndex === 0 || colIndex === 1) {
        // Evitar doble toggle si el click fue directamente en el input
        if (e.target.tagName.toLowerCase() === 'input') return;
        const checkbox = $(this).closest('tr').find('td').eq(0).find('input[type="checkbox"]');
        checkbox.prop('checked', !checkbox.prop('checked'));
        // Disparar el evento change para actualizar botones
        checkbox.trigger('change');
      }
    });
  });
</script>
</body>
</html>