/* global Swal */

function validarFormularioEditarAbastecimiento(evento) {
  evento.preventDefault();

  // ====== IDs y helpers ======
  const $form = evento.target;
  const get = (id) => document.getElementById(id);
  const tipoId = parseInt(get('tipo_combustible_id')?.value || '0', 10);

  // ====== 1) Validación de mixtos (4,5,6,7) ======
  if ([4, 5, 6, 7].includes(tipoId)) {
    const elegido = $form.querySelector('input[name="combustible_abastecido"]:checked');
    if (!elegido) {
      Swal.fire({
        icon: 'warning',
        title: 'Falta seleccionar combustible',
        text: 'Selecciona el combustible abastecido (GLP/GNV o Gasolina).',
        timer: 2200
      });
      return;
    }
  }

  // ====== 2) Capacidad vs cantidad (3 decimales permitidos) ======
  const capacidadVehiculo = parseFloat(get('capacidad_combustible_hidden')?.value) || 0;
  const $gln = get('cantidad_gln');
  const $vu  = get('valor_unitario_gln');

  let cantidad_gln = parseFloat($gln?.value) || 0;
  if (cantidad_gln <= 0) {
    Swal.fire({
      icon: 'warning',
      title: 'Cantidad GLN inválida',
      text: 'Ingrese una cantidad mayor a cero.',
      timer: 2000
    });
    return;
  }
  if (capacidadVehiculo > 0 && cantidad_gln > capacidadVehiculo) {
    Swal.fire({
      icon: 'warning',
      title: 'Excede la capacidad del tanque',
      text: `La capacidad máxima es ${capacidadVehiculo} GLN.`,
      timer: 2200
    });
    return;
  }

  // ====== 3) Kilometraje (si el campo no está readonly) ======
  const km_actual = parseInt(get('kilometraje_actual_hidden')?.value) || 0;
  const $km = get('kilometraje');
  const km_abastecimiento = parseInt($km?.value) || 0;

  if ($km && !$km.hasAttribute('readonly')) {
    if (km_abastecimiento < km_actual) {
      Swal.fire({
        icon: 'warning',
        title: 'Kilometraje inválido',
        text: 'El kilometraje no puede ser menor al actual.',
        timer: 2200
      });
      return;
    }
  }

  // ====== 4) Fecha/Hora no en futuro (si no están readonly) ======
  const $fecha = get('fecha_abastecimiento');
  const $hora  = get('hora_abastecimiento');
  if ($fecha && $hora && !$fecha.hasAttribute('readonly')) {
    const f = $fecha.value;
    const h = $hora.value;
    if (f && h) {
      const fechaHora = new Date(`${f}T${h}`);
      if (fechaHora > new Date()) {
        Swal.fire({
          icon: 'warning',
          title: 'Fecha/Hora inválida',
          text: 'No puedes registrar abastecimientos en el futuro.',
          timer: 2200
        });
        return;
      }
    }
  }

  // ====== 5) Normalización a 3 decimales antes de enviar ======
  if ($gln && $gln.value) {
    const n = Number($gln.value);
    if (!Number.isNaN(n)) $gln.value = n.toFixed(3);
  }
  if ($vu && $vu.value) {
    const n = Number($vu.value);
    if (!Number.isNaN(n)) $vu.value = n.toFixed(3);
  }

  // Si todo OK, enviamos
  $form.submit();
}

document.addEventListener('DOMContentLoaded', () => {
  const form = document.getElementById('Editar_Abastecimiento');
  if (form) {
    // Evitar doble binding si este archivo se incluye más de una vez por error
    form.removeEventListener('submit', validarFormularioEditarAbastecimiento);
    form.addEventListener('submit', validarFormularioEditarAbastecimiento);
  }
});
