/* global Swal */

$(function () {
  // === Select2 ===
  $('#galonera_id').select2({ width: '100%', placeholder: 'Seleccione una galonera' });
  $('#grifo_id').select2({ width: '100%', placeholder: 'Seleccione un grifo' });

  // ⚠️ Ajusta el ID de GLP si en tu BD no es 8
  const TIPO_MAP = {
    1: 'DIESEL B5 (DB5)',
    2: 'G-REGULAR',
    3: 'G-PREMIUM',
    8: 'GLP'
  };

  // === Sincronización de datos visibles de la galonera (capacidad/tipo) ===
  function syncGaloneraInfo() {
    const $opt = $('#galonera_id').find('option:selected');

    if (!$opt.length) {
      $('#capacidad_litros').val('');
      $('#tipo_combustible_id').val('');
      $('#tipo_combustible_txt').val('');
      return;
    }

    const capStr   = $opt.attr('data-capacidad');
    const cap      = capStr != null ? parseFloat(capStr) : NaN;

    const tipoIdStr = $opt.attr('data-tipo');
    const tipoId    = tipoIdStr != null ? parseInt(tipoIdStr, 10) : 0;

    // Prioriza nombre desde el option; si no viene, usa el mapa por ID
    const tipoNmAttr = ($opt.attr('data-tipo-nombre') || '').toString().trim();
    const tipoNm     = tipoNmAttr || (TIPO_MAP[tipoId] || '');

    $('#capacidad_litros').val(Number.isFinite(cap) ? cap.toFixed(2) : '');
    $('#tipo_combustible_id').val(tipoId || '');
    $('#tipo_combustible_txt').val(tipoNm || '—');
  }

  function validarCapacidad() {
    const cap  = parseFloat($('#capacidad_litros').val());
    const cant = parseFloat($('#cantidad_gln').val());
    if (!isNaN(cap) && !isNaN(cant) && cant > cap) {
      $('#capacidad_alert').removeClass('d-none');
      $('#cantidad_gln').addClass('is-invalid');
    } else {
      $('#capacidad_alert').addClass('d-none');
      $('#cantidad_gln').removeClass('is-invalid');
    }
  }

  $('#galonera_id').on('change', function () {
    syncGaloneraInfo();
    validarCapacidad();
  });
  $('#cantidad_gln').on('input', validarCapacidad);

  // Estado inicial (por si ya viene una opción seleccionada al cargar)
  syncGaloneraInfo();
  validarCapacidad();

  // =========================
  //  DNI bloqueado en edición
  // =========================
  const $dni = $('#dni');
  const dniBloqueado = $dni.is('[readonly]') || $dni.is(':disabled');
  // Si está bloqueado, no configuramos handlers de búsqueda/validación de DNI (el back conserva responsable_id).

  // =========================
  //  Validación en Submit
  // =========================
  $('#Editar_Abastecimiento_Galonera').on('submit', function (e) {
    e.preventDefault();

    if (!$('#galonera_id').val()) {
      Swal.fire({ icon: 'warning', title: 'Falta información', text: 'Seleccione una galonera.', timer: 2000, showConfirmButton: false });
      return;
    }
    if (!$('#grifo_id').val()) {
      Swal.fire({ icon: 'warning', title: 'Falta información', text: 'Seleccione un grifo.', timer: 2000, showConfirmButton: false });
      return;
    }

    const cap = parseFloat($('#capacidad_litros').val() || '0') || 0;
    const q   = parseFloat($('#cantidad_gln').val() || '0') || 0;
    if (q <= 0) {
      Swal.fire({ icon: 'warning', title: 'Cantidad GLN inválida', text: 'Ingrese una cantidad mayor a cero.', timer: 2000, showConfirmButton: false });
      return;
    }
    if (cap > 0 && q > cap) {
      $('#capacidad_alert').removeClass('d-none');
      $('#cantidad_gln').addClass('is-invalid');
      Swal.fire({ icon: 'warning', title: 'Excede la capacidad de la galonera', text: `La capacidad máxima es ${cap} GLN.`, timer: 2200, showConfirmButton: false });
      return;
    }

    const vu = parseFloat($('#valor_unitario_gln').val() || '0') || 0;
    if (vu <= 0) {
      Swal.fire({ icon: 'warning', title: 'Valor inválido', text: 'Ingrese un valor unitario (S/ por GLN) mayor a 0.', timer: 2000, showConfirmButton: false });
      return;
    }

    const f = ($('#fecha_abastecimiento').val() || '').trim();
    const h = ($('#hora_abastecimiento').val() || '').trim();
    if (!f || !h) {
      Swal.fire({ icon: 'warning', title: 'Falta información', text: 'Complete la fecha y la hora.', timer: 2000, showConfirmButton: false });
      return;
    }
    const fh = new Date(`${f}T${h}`);
    if (fh > new Date()) {
      Swal.fire({ icon: 'warning', title: 'Fecha/Hora inválida', text: 'No puedes registrar abastecimientos en el futuro.', timer: 2000, showConfirmButton: false });
      return;
    }

    // Si el DNI está bloqueado, NO exigimos volver a verificar responsable (el back conserva responsable_id).
    this.submit();
  });
});
