let solicitudAAutorizar = null;
let solicitudes = [];
let solicitudesFiltradas = [];
let paginaActual = 1;
const resultadosPorPagina = 10;

document.addEventListener("DOMContentLoaded", () => {
  fetch("../../../backend/admin/autorizaciones/get_autorizaciones.php")
    .then(res => res.json())
    .then(data => {
      if (!data.success) return;

      solicitudes = data.data.sort((a, b) => {
        const orden = { 0: 0, 1: 1, 3: 2 };
        return orden[a.EstatusRH] - orden[b.EstatusRH];
      });

      solicitudesFiltradas = [...solicitudes];
      cargarPagina(paginaActual);
    });

  document.getElementById("buscador-autorizaciones").addEventListener("input", filtrarSolicitudes);
});


function cargarPagina(pagina) {
  const tbody = document.getElementById("tabla-autorizaciones");
  tbody.innerHTML = "";

  const inicio = (pagina - 1) * resultadosPorPagina;
  const fin = inicio + resultadosPorPagina;
  const datosPagina = solicitudesFiltradas.slice(inicio, fin);

  datosPagina.forEach(item => {
    const estatus = parseInt(item.EstatusRH);
    const color = estatus === 0 ? 'table-warning' :
                  estatus === 1 ? 'table-success' :
                  estatus === 3 ? 'table-danger' : '';

    const fila = `
      <tr class="${color}">
        <td>${item.Nombre}</td>
        <td>${item.CURP}</td>
        <td>${item.Movimiento}</td>
        <td>${item.temporalidadMovimiento}</td>
        <td>${item.actualPDV}</td>
        <td>${item.Observaciones || ''}</td>
        <td>
          <div class="d-flex gap-1 justify-content-center">
            <button class="btn btn-primary btn-sm" onclick="verDetalles(${item.ID})" title="Ver detalles">
              <i class="fas fa-eye"></i>
            </button>
            <button class="btn btn-outline-success btn-sm" onclick="mostrarModal(${item.ID})" title="Autorizar">
              <i class="fas fa-check"></i>
            </button>
            <button class="btn btn-outline-danger btn-sm" onclick="rechazarSolicitud(${item.ID})" title="Rechazar">
              <i class="fas fa-times"></i>
            </button>
          </div>
        </td>
      </tr>
    `;
    tbody.insertAdjacentHTML("beforeend", fila);
  });

  renderizarControles();
}


function filtrarSolicitudes() {
  const texto = document.getElementById("buscador-autorizaciones").value.trim().toLowerCase();

  if (texto === "") {
    solicitudesFiltradas = [...solicitudes];
  } else {
    solicitudesFiltradas = solicitudes.filter(item => {
      const nombreCompleto = `${item.Nombre}`.toLowerCase();
      const curp = `${item.CURP}`.toLowerCase();
      return nombreCompleto.includes(texto) || curp.includes(texto);
    });
  }

  paginaActual = 1;
  cargarPagina(paginaActual);
}


function renderizarControles() {
  const contenedor = document.getElementById("paginacion-autorizaciones");
  const totalPaginas = Math.ceil(solicitudes.length / resultadosPorPagina);
  let botones = '';

  for (let i = 1; i <= totalPaginas; i++) {
    botones += `
      <button class="btn btn-sm ${i === paginaActual ? 'btn-primary' : 'btn-outline-primary'} mx-1"
              onclick="irAPagina(${i})">${i}</button>`;
  }

  contenedor.innerHTML = botones;
}

function irAPagina(num) {
  paginaActual = num;
  cargarPagina(paginaActual);
}

function verDetalles(id) {
  solicitudAAutorizar = id;
  fetch(`../../../backend/admin/autorizaciones/get_detalle.php?id=${id}`)
    .then(res => res.json())
    .then(data => {
      if (!data.success) {
        Swal.fire({
          icon: 'error',
          title: 'Error',
          text: 'No se pudo cargar el detalle de la solicitud.'
        });
        return;
      }

      const detalle = data.data;
      const contenedor = document.getElementById('contenido-detalles');
      contenedor.innerHTML = `
        <div class="col-md-6"><strong>Nombre:</strong> ${detalle.Nombre}</div>
        <div class="col-md-6"><strong>CURP:</strong> ${detalle.CURP}</div>
        <div class="col-md-6"><strong>Movimiento:</strong> ${detalle.Movimiento}</div>
        <div class="col-md-6"><strong>Temporalidad:</strong> ${detalle.temporalidadMovimiento}</div>
        <div class="col-md-6"><strong>PDV Actual:</strong> ${detalle.actualPDV}</div>
        <div class="col-md-6"><strong>Nuevo PDV:</strong> ${detalle.nuevoPDV}</div>
        <div class="col-md-6"><strong>Sueldo Actual:</strong> $${detalle.actualSueldo ? parseFloat(detalle.actualSueldo).toLocaleString() : 'No definido'}</div>
        <div class="col-md-6"><strong>Nuevo Sueldo:</strong> $${detalle.nuevoSueldo ? parseFloat(detalle.nuevoSueldo).toLocaleString() : 'No definido'}</div>
        <div class="col-md-6"><strong>Puesto Actual:</strong> ${detalle.actualPuesto}</div>
        <div class="col-md-6"><strong>Nuevo Puesto:</strong> ${detalle.nuevoPuesto}</div>
        <div class="col-md-6"><strong>Fecha de Solicitud:</strong> ${detalle.fechaSolicitud}</div>
        <div class="col-md-6"><strong>Bono:</strong> ${
            detalle.Movimiento?.includes('Bono') && !isNaN(parseFloat(detalle.Bono)) && parseFloat(detalle.Bono) > 0
              ? `$${parseFloat(detalle.Bono).toLocaleString()}`
              : 'No aplica'}
        </div>
        <div class="col-12"><strong>Observaciones:</strong> ${detalle.Observaciones || 'N/A'}</div>
      `;

      const modal = new bootstrap.Modal(document.getElementById('modalDetalles'));
      modal.show();
    });
}

function mostrarModal(id) {
  solicitudAAutorizar = id;
  const modal = new bootstrap.Modal(document.getElementById('modalConfirmar'));
  modal.show();
}

document.getElementById('btnAutorizarDesdeDetalle').addEventListener('click', autorizar);
document.getElementById('btnConfirmarAutorizacion').addEventListener('click', autorizar);

async function autorizar() {
  if (!solicitudAAutorizar) {
    Swal.fire({
      icon: 'warning',
      title: 'Atención',
      text: 'No se ha seleccionado ninguna solicitud para autorizar.'
    });
    return;
  }

  // Obtener el detalle actualizado antes de autorizar
  const respuesta = await fetch(`../../../backend/admin/autorizaciones/get_detalle.php?id=${solicitudAAutorizar}`);
  const detalle = await respuesta.json();

  if (!detalle.success) {
    Swal.fire({
      icon: 'error',
      title: 'Error',
      text: 'No se pudo obtener el detalle de la solicitud.'
    });
    return;
  }

  const mov = detalle.data.Movimiento || '';
  const sueldoActual = parseFloat(detalle.data.actualq) || 0;
  const nuevoSueldo = parseFloat(detalle.data.nuevoSueldo) || 0;

  const datos = {
    id: solicitudAAutorizar,
    tipo_movimiento: mov,
    sueldo_actual: sueldoActual
  };

  // Solo enviar nuevo_sueldo si es cambio de sueldo o cambio de turno
  if (mov.includes('Cambio de sueldo') || mov.includes('Cambio de turno')) {
    datos.nuevo_sueldo = nuevoSueldo;
  }

  fetch("../../../backend/admin/autorizaciones/autorizar_solicitud.php", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify(datos)
  })
    .then(async res => {
      const data = await res.json();

      const modalDetalle = bootstrap.Modal.getInstance(document.getElementById('modalDetalles'));
      const modalConfirmar = bootstrap.Modal.getInstance(document.getElementById('modalConfirmar'));
      if (modalDetalle) modalDetalle.hide();
      if (modalConfirmar) modalConfirmar.hide();

      if (res.ok && data.success) {
        Swal.fire({
          icon: 'success',
          title: '¡Autorizado!',
          text: 'La solicitud fue autorizada correctamente.',
          confirmButtonColor: '#198754'
        }).then(() => location.reload());
      } else {
        Swal.fire({
          icon: 'error',
          title: 'Error al autorizar',
          text: data.message || 'Ocurrió un error inesperado.',
          footer: 'Contacta a TI si el problema persiste.'
        });
      }
    })
    .catch(error => {
      console.error("Excepción durante autorización:", error);
      Swal.fire({
        icon: 'error',
        title: 'Error de red o servidor',
        text: `Hubo un problema al procesar la autorización.\n${error.message}`,
        footer: 'Contacta a TI con esta información.'
      });
    });
}



function rechazarSolicitud(id) {
  Swal.fire({
    icon: 'warning',
    title: '¿Estás seguro?',
    text: 'Esta acción marcará la solicitud como RECHAZADA.',
    showCancelButton: true,
    confirmButtonColor: '#dc3545',
    cancelButtonColor: '#6c757d',
    confirmButtonText: 'Sí, rechazar',
    cancelButtonText: 'Cancelar'
  }).then((result) => {
    if (result.isConfirmed) {
      fetch("../../../backend/admin/autorizaciones/rechazar_solicitud.php", {
        method: "POST",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify({ id })
      })
        .then(res => res.json())
        .then(data => {
          if (data.success) {
            Swal.fire({
              icon: 'success',
              title: 'Rechazada',
              text: 'La solicitud fue marcada como rechazada.'
            }).then(() => location.reload());
          } else {
            Swal.fire({
              icon: 'error',
              title: 'Error',
              text: data.message || 'No se pudo rechazar la solicitud.'
            });
          }
        });
    }
  });
}
