const rutas = window.rutasData || {};
let ultimoKM = 0;

/* =================== AGREGADO: helpers de fecha/estilos =================== */
// Inyecta estilos para alinear Select2 a la izquierda (una sola vez)
(function ensureSelect2LeftStyles(){
  const ID = 'select2-left-align-style';
  if (!document.getElementById(ID)) {
    const css = `
      .select2-container .select2-selection__rendered,
      .select2-container .select2-results__option,
      .select2-container .select2-search--dropdown .select2-search__field {
        text-align: left !important;
      }
    `;
    const tag = document.createElement('style');
    tag.id = ID;
    tag.textContent = css;
    document.head.appendChild(tag);
  }
})();

// Formatea 'YYYY-MM-DD' o 'YYYY-MM-DD HH:MM:SS' a 'DD/MM/YYYY'
function formatearFechaBonita(iso) {
  if (!iso) return '—';
  try {
    const d = new Date(String(iso).replace(' ', 'T'));
    if (isNaN(d.getTime())) return '—';
    const dd = String(d.getDate()).padStart(2,'0');
    const mm = String(d.getMonth()+1).padStart(2,'0');
    const yy = d.getFullYear();
    return `${dd}/${mm}/${yy}`;
  } catch { return '—'; }
}

// Actualiza ambos inputs si existen
function setUltimoKmYFecha(km, fechaISO) {
  const kmNum = (km == null ? 0 : parseInt(km)) || 0;
  const $km = document.getElementById("ultimoKmInput");
  if ($km) $km.value = "Último KM: " + kmNum + " km";

  const $fec = document.getElementById("ultimaFechaInput");
  if ($fec) $fec.value = "Última fecha: " + formatearFechaBonita(fechaISO);
}
/* ======================================================================== */

function buscarVehiculo() {
  const placa = document.getElementById("placaInput").value.trim().toUpperCase();
  if (placa === '') {
    Swal.fire({
      icon: 'warning',
      title: 'Campo obligatorio',
      text: 'Por favor, ingrese una placa.',
      timer: 2000,
      showConfirmButton: false
    });
    return;
  }

  fetch('../../Controlador/Utilidades/Fetch_Vehiculo.php?placa=' + placa)
    .then(res => res.json())
    .then(data => {
      if (data.error === 'estado_invalido') {
        Swal.fire({
          icon: 'warning',
          title: 'Vehículo no disponible',
          text: `Estado del Vehículo: ${data.estado.toUpperCase()}`,
          timer: 2000,
          showConfirmButton: false
        });
        document.getElementById("ultimoKmInput").value = "Vehículo no disponible";
        // AGREGADO: también limpia la fecha
        setUltimoKmYFecha(0, null);
        ultimoKM = 0;
        return;
      }

      if (data.error === 'no_existe') {
        Swal.fire({
          icon: 'error',
          title: 'Vehículo no encontrado',
          text: 'La placa ingresada no existe.',
          timer: 2000,
          showConfirmButton: false
        });
        // AGREGADO: restablecer ambos
        setUltimoKmYFecha(0, null);
        ultimoKM = 0;
        return;
      }

      ultimoKM = parseInt(data.kilometraje_actual) || 0;

      // AGREGADO: soporta ambas claves para la fecha
      const fechaUlt = data.fechaUltimoKm || data.fecha_ultimo_km || null;
      setUltimoKmYFecha(ultimoKM, fechaUlt);

      actualizarTotales();
    })
    .catch(error => {
      console.error("Error:", error);
      Swal.fire({
        icon: 'error',
        title: 'Error',
        text: 'No se pudo obtener el kilometraje del vehículo.',
        timer: 2000,
        showConfirmButton: false
      });
    });
}

function agregarFila() {
  const tbody = document.querySelector("#tablaRutas tbody");
  const tr = document.createElement("tr");

  // Selector de rutas
  const select = document.createElement("select");
  select.className = "form-select ruta";

  let isFirst = true;
  for (const id in rutas) {
    const option = document.createElement("option");
    option.value = id;
    option.text = rutas[id].nombre;
    if (isFirst) {
      option.selected = true;
      isFirst = false;
    }
    select.appendChild(option);
  }

  // Km por vuelta
  const kmInput = document.createElement("input");
  kmInput.type = "number";
  kmInput.step = "1";
  kmInput.className = "form-control km";
  kmInput.readOnly = true;

  // Vueltas
  const vueltasInput = document.createElement("input");
  vueltasInput.type = "number";
  vueltasInput.min = 1;
  vueltasInput.value = 1;
  vueltasInput.className = "form-control vueltas";

  // Km adicionales
  const adicionalesInput = document.createElement("input");
  adicionalesInput.type = "number";
  adicionalesInput.min = 0;
  adicionalesInput.value = 0;
  adicionalesInput.className = "form-control adicionales";

  // Subtotal
  const subtotalInput = document.createElement("input");
  subtotalInput.type = "text";
  subtotalInput.className = "form-control subtotal";
  subtotalInput.readOnly = true;
  subtotalInput.value = "0";

  // Botón eliminar
  const eliminarBtn = document.createElement("button");
  eliminarBtn.className = "btn btn-danger";
  eliminarBtn.textContent = "✕";
  eliminarBtn.onclick = () => {
    tr.remove();
    actualizarTotales();
  };

  // Eventos
  function onRutaChange() {
    const rutaId = select.value;
    if (rutaId && rutas[rutaId]) {
      kmInput.value = rutas[rutaId].km;
    } else {
      kmInput.value = 0;
    }
    actualizarFila(tr);
  }

  [kmInput, vueltasInput, adicionalesInput].forEach(input => {
    input.addEventListener("input", () => actualizarFila(tr));
  });

  // Agregar a la fila
  tr.append(
    td(select), td(kmInput), td(vueltasInput),
    td(adicionalesInput), td(subtotalInput), td(eliminarBtn)
  );

  tbody.appendChild(tr);

  // Inicializar Select2 y configurar evento change
  setTimeout(() => {
    $(select).select2({
      placeholder: "Buscar ruta...",
      dropdownParent: $(tr)
    });

    // Importante: agregar evento después de Select2 y dispararlo manualmente con jQuery
    $(select).on('change', onRutaChange);

    // ✅ Esta es la línea que soluciona el problema:
    $(select).trigger('change'); // ← en lugar de dispatchEvent
  }, 0);

  // Disparar evento change para precargar KM
  select.dispatchEvent(new Event('change'));
}

function td(element) {
  const cell = document.createElement("td");
  cell.appendChild(element);
  return cell;
}

function actualizarFila(tr) {
  const km = parseFloat(tr.querySelector(".km").value) || 0;
  const vueltas = parseInt(tr.querySelector(".vueltas").value) || 0;
  const adicionales = parseInt(tr.querySelector(".adicionales").value) || 0;
  const subtotal = Math.round(km * vueltas + adicionales);
  tr.querySelector(".subtotal").value = subtotal;
  actualizarTotales();
}

function actualizarTotales() {
  let total = 0;
  document.querySelectorAll(".subtotal").forEach(input => {
    total += parseInt(input.value) || 0;
  });
  document.getElementById("totalKM").textContent = total;
  document.getElementById("nuevoKM").textContent = total + ultimoKM;
}

function copiarKilometraje() {
  const nuevoKm = document.getElementById("nuevoKM").textContent;
  navigator.clipboard.writeText(nuevoKm).then(() => {
    Swal.fire({
      icon: 'success',
      title: 'Copiado',
      text: 'Nuevo kilometraje copiado: ' + nuevoKm + ' km',
      timer: 2000,
      showConfirmButton: false
    });
  }).catch(() => {
    Swal.fire({
      icon: 'error',
      title: 'Error',
      text: 'No se pudo copiar el kilometraje.',
      timer: 2000,
      showConfirmButton: false
    });
  });
}
