  <?php include __DIR__ . '/../partials/sidebar_importador.php'; ?>

<!DOCTYPE html>
<html lang="es">
<head>
  <meta charset="UTF-8">
  <title>📄 Solicitudes de Importación</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
  <link href="https://cdn.datatables.net/1.13.4/css/jquery.dataTables.min.css" rel="stylesheet">
  <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
  <script src="https://code.jquery.com/jquery-3.7.0.min.js"></script>
  <script src="https://cdn.datatables.net/1.13.4/js/jquery.dataTables.min.js"></script>
  <style>
    table.dataTable thead th { background: #343a40; color: #fff; }
    body { font-family: 'Segoe UI', sans-serif; background-color: #f4f6f9; }
    .sidebar { width: 220px; height: 100vh; background-color: #343a40; position: fixed; top: 0; left: 0; padding-top: 56px; z-index: 1040;
    }
    .sidebar .nav-link { font-weight: bold; color: white; transition: all 0.3s ease; }
    .sidebar .nav-link:hover,
    .sidebar .nav-link.active { background-color: #495057; color: #fff; }
    .content { margin-top: 56px; padding: 40px 20px; position: relative; z-index: 1; background-color: #f4f6f9; transition: margin-left 0.3s ease;
    }
    .navbar { position: fixed; top: 0; width: 100%; z-index: 1050; }
    /* A partir de dispositivos medianos (>=768px), deja espacio lateral */
    @media (min-width: 768px) { .content { margin-left: 250px; /* Ancho del sidebar */ } }
    /* En móviles, sin margen lateral */
    @media (max-width: 767.98px) {
      .content { margin-left: 0; }
      .sidebar .nav-link { font-weight: normal; color: #343a40; background-color: transparent; }
      .sidebar .nav-link:hover,
      .sidebar .nav-link.active { background-color: #e9ecef; color: #212529; }
    }
    .card { border-radius: 12px; }
    .status-select:disabled { background-color: #e9ecef; color: #6c757d;}
  </style>
</head>
<body>

  <div class="content">
    <h4>📄 Solicitudes de Importación</h4>
    <a href="/IMPORTADORES/solicitud_importacion/crear" class="btn btn-success mb-3">➕ Nueva Solicitud</a>
    <div class="card p-3 shadow-sm">
      <div class="table-responsive">
        <table class="table table-striped" id="tabla-solicitudes">
          <thead>
            <tr>
              <th>#</th>
              <th>Factura</th>
              <th>Fecha</th>
              <th>Pedimento</th>
              <th>Incoterm</th>
              <th>País Proveedor</th>
              <th>Moneda</th>
              <th>Valor</th>
              <th>Vinculación</th>
              <th>Transportista</th>
              <th>PDF</th>
              <!-- Nueva columna Status -->
              <th>Status</th>
              <th>Acciones</th>
            </tr>
          </thead>
          <tbody>
            <?php foreach($facturas as $f): ?>
            <tr>
              <td><?= $f['id_solicitud'] ?></td>
              <td><?= htmlspecialchars($f['numero_factura']) ?></td>
              <td><?= htmlspecialchars($f['fecha_factura']) ?></td>
              <td><?= htmlspecialchars($f['numero_pedimento']) ?></td>
              <td><?= htmlspecialchars($f['incoterm']) ?></td>
              <td><?= htmlspecialchars($f['nombre_pais_proveedor']) ?></td>
              <td><?= htmlspecialchars($f['tipo_moneda']) ?></td>
              <td><?= number_format($f['valor_factura'],2) ?></td>
              <!-- Celda de Vinculación -->
              <td>
                <?php
                  switch($f['vinculacion']) {
                    case 1: echo 'Existe, no afecta'; break;
                    case 2: echo 'Existe y afecta'; break;
                    default: echo 'No existe';
                  }
                ?>
              </td>
              <!-- Celda de Transportista -->
              <td><?= htmlspecialchars($f['transportista']) ?></td>
              <!-- Celda de Vista PDF -->
              <td>
                <a href="/IMPORTADORES/solicitud_importacion/pdf?id=<?= $f['id_solicitud'] ?>" 
                  class="btn btn-sm btn-outline-secondary" target="_blank">
                  📄 PDF
                </a>
              </td>
              <!-- Celda de Status -->
              <td>
                <select 
                  class="form-select status-select" 
                  data-id="<?= $f['id_solicitud'] ?>"
                >
                  <option value="1" <?= $f['status']==1 ? 'selected' : '' ?>>1 – En proceso</option>
                  <option value="2" <?= $f['status']==2 ? 'selected' : '' ?>>2 – Solicitar importación</option>
                  <option value="3" <?= $f['status']==3 ? 'selected' : '' ?>>3 – Con agencia aduana</option>
                  <option value="4" <?= $f['status']==4 ? 'selected' : '' ?>>4 – En proceso de pago</option>
                  <option value="5" <?= $f['status']==5 ? 'selected' : '' ?>>5 – Pedimento generado</option>
                </select>
              </td>
              <!-- Celda de Acciones -->
              <td>
                <a href="/IMPORTADORES/solicitud_importacion/editar?id=<?= $f['id_solicitud'] ?>"
                  class="btn btn-sm btn-primary">✏️</a>
                <button class="btn btn-sm btn-danger"
                        onclick="confirmDelete(<?= $f['id_solicitud'] ?>)">🗑️</button>
              </td>
            </tr>
            <?php endforeach; ?>
          </tbody>
        </table>
      </div>
    </div>
  </div>

  <script>
    function confirmDelete(id) {
      Swal.fire({
        title: '¿Eliminar solicitud?',
        text: 'Se marcará como inactiva.',
        icon: 'warning',
        showCancelButton: true,
        confirmButtonText: 'Sí, eliminar',
        cancelButtonText: 'Cancelar',
        confirmButtonColor: '#d33'
      }).then(r => {
        if (r.isConfirmed) {
          window.location = `/IMPORTADORES/solicitud_importacion/eliminar?id=${id}`;
        }
      });
    }

    $(document).ready(function () {
      // Inicializa DataTable
      const table = $('#tabla-solicitudes').DataTable({
        language: { url: 'https://cdn.datatables.net/plug-ins/1.13.4/i18n/es-ES.json' }
      });

      // Función para bloquear o desbloquear acciones según status
      function updateRowStatus($row, status) {
        const disable = status === '2'; // 2 = Solicitar importación
        $row.find('a.btn, button.btn').prop('disabled', disable);
        
        // Opcional: cambiar estilo visual para indicar estado bloqueado
        if (disable) {
          $row.addClass('table-warning').find('.status-select').addClass('border-warning');
        } else {
          $row.removeClass('table-warning').find('.status-select').removeClass('border-warning');
        }
      }

      // Función para mostrar loading en el select
      function setSelectLoading($select, loading) {
        if (loading) {
          $select.prop('disabled', true).addClass('border-primary');
          $select.closest('tr').find('td').addClass('opacity-75');
        } else {
          $select.prop('disabled', false).removeClass('border-primary');
          $select.closest('tr').find('td').removeClass('opacity-75');
        }
      }

      // Al cambiar el select de status
      $('#tabla-solicitudes').on('change', '.status-select', function () {
        const $sel = $(this);
        const id = $sel.data('id');
        const status = $sel.val();
        const $row = $sel.closest('tr');
        const oldStatus = $sel.data('old-status') || $sel.find('option:first').val();
        
        // Guardar el estado anterior para poder revertir si falla
        $sel.data('old-status', oldStatus);
        
        // Mostrar loading
        setSelectLoading($sel, true);
        
        // Mostrar toast de procesando
        Swal.fire({
          title: 'Actualizando...',
          text: 'Procesando cambio de estado',
          icon: 'info',
          allowOutsideClick: false,
          showConfirmButton: false,
          timer: 1000,
          timerProgressBar: true
        });

        // Llamada AJAX con configuración mejorada
        $.ajax({
          url: '/IMPORTADORES/solicitud_importacion/update_status',
          method: 'POST',
          data: { 
            id: id, 
            status: status 
          },
          dataType: 'json',
          timeout: 30000, // 30 segundos timeout
          success: function(res) {
            console.log('Respuesta del servidor:', res);
            
            if (!res.success) {
              // Error del servidor pero respuesta válida
              handleUpdateError('Error del servidor: ' + (res.error || 'Error desconocido'), $sel, oldStatus);
              return;
            }
            
            // Éxito - actualizar UI
            updateRowStatus($row, status);
            $sel.data('old-status', status); // Actualizar estado guardado
            
            // Mostrar mensaje específico según el resultado
            if (res.numeroPedimentoLocal) {
              Swal.fire({
                title: '¡Importación solicitada!',
                text: `Se generó el número de pedimento: ${res.numeroPedimentoLocal}`,
                icon: 'success',
                confirmButtonText: 'Entendido'
              });
              
              // Actualizar la celda del pedimento si existe
              const $pedimentoCell = $row.find('td[data-pedimento]');
              if ($pedimentoCell.length) {
                $pedimentoCell.text(res.numeroPedimentoLocal).addClass('text-success fw-bold');
              }
            } else if (res.warning) {
              // Mostrar advertencia si hay alguna
              Swal.fire({
                title: 'Estado actualizado',
                text: res.warning,
                icon: 'warning',
                confirmButtonText: 'Entendido'
              });
            } else {
              // Éxito normal
              Swal.fire({
                title: '¡Actualizado!',
                text: 'Estado cambiado correctamente',
                icon: 'success',
                timer: 2000,
                showConfirmButton: false
              });
            }
          },
          error: function(xhr, status, error) {
            console.error('Error AJAX:', { xhr, status, error });
            
            let errorMessage = 'No se pudo conectar al servidor';
            
            // Mejorar el mensaje de error según el tipo
            if (status === 'timeout') {
              errorMessage = 'La operación tardó demasiado tiempo. Inténtalo de nuevo.';
            } else if (status === 'parsererror') {
              errorMessage = 'Error al procesar la respuesta del servidor';
            } else if (xhr.status) {
              switch(xhr.status) {
                case 401:
                  errorMessage = 'Tu sesión ha expirado. Recarga la página e inicia sesión nuevamente.';
                  break;
                case 403:
                  errorMessage = 'No tienes permisos para realizar esta acción';
                  break;
                case 404:
                  errorMessage = 'El servicio no está disponible temporalmente';
                  break;
                case 500:
                  errorMessage = 'Error interno del servidor. Contacta al administrador.';
                  break;
                default:
                  errorMessage = `Error del servidor (${xhr.status}): ${xhr.statusText}`;
              }
            }
            
            handleUpdateError(errorMessage, $sel, oldStatus);
          },
          complete: function() {
            // Quitar loading siempre
            setSelectLoading($sel, false);
          }
        });
      });

      // Función para manejar errores de actualización
      function handleUpdateError(message, $select, oldStatus) {
        // Revertir el select al estado anterior
        $select.val(oldStatus);
        
        // Mostrar error
        Swal.fire({
          title: 'Error',
          text: message,
          icon: 'error',
          confirmButtonText: 'Entendido'
        });
        
        // Log para debugging
        console.error('Error al actualizar estado:', message);
      }

      // Al cargar, aplica bloqueo si ya está en "Solicitar importación"
      $('#tabla-solicitudes tbody tr').each(function () {
        const $sel = $(this).find('.status-select');
        if ($sel.length) {
          updateRowStatus($(this), $sel.val());
          // Guardar estado inicial
          $sel.data('old-status', $sel.val());
        }
      });

      // Interceptar errores globales de AJAX para debugging
      $(document).ajaxError(function(event, xhr, settings, thrownError) {
        if (settings.url.includes('update_status')) {
          console.error('AJAX Error Details:', {
            url: settings.url,
            status: xhr.status,
            statusText: xhr.statusText,
            responseText: xhr.responseText,
            thrownError: thrownError
          });
        }
      });

      // Mensajes SweetAlert tras acciones
      <?php if(isset($_GET['deleted'])): ?>
        Swal.fire('¡Hecho!','Solicitud eliminada.','success');
      <?php elseif(isset($_GET['created'])): ?>
        Swal.fire('¡Listo!','Solicitud creada.','success');
      <?php elseif(isset($_GET['updated'])): ?>
        Swal.fire('¡Listo!','Solicitud actualizada.','success');
      <?php endif; ?>
    });
  </script>

</body>
</html>