<script>
document.getElementById("edittrip").addEventListener("submit", async function(e) {
  e.preventDefault();
  if (typeof window.syncStopsInputEdit === "function") window.syncStopsInputEdit(true);

  const form = document.getElementById("edittrip");
  const formData = new FormData(form);
  let requestData = {};

  formData.forEach((value, key) => {
    if (value !== null && value !== "") {
      requestData[key] = value;
    }
  });

  // Auto update trip status when payment is marked as paid
  if (requestData.trip_pay_status?.toLowerCase() === "paid" && "<%= trip.trip_status %>" == "paid_cancel") {
    requestData.trip_status = "completed";
  }

  // Include calculated fare values from the fare summary display
  const distanceInput = document.getElementById("trip_distance");
  const timeInput = document.getElementById("trip_total_time");
  const gstInput = document.getElementById("gst_amount");
  const grossFareInput = document.getElementById("gross_fare");
  
  if (distanceInput && distanceInput.value) {
    requestData.trip_distance = distanceInput.value;
  }
  if (timeInput && timeInput.value) {
    requestData.trip_total_time = timeInput.value;
  }
  if (gstInput && gstInput.value) {
    requestData.gst_amount = gstInput.value;
  }
  if (grossFareInput && grossFareInput.value) {
    requestData.gross_fare = grossFareInput.value;
  }

  // Receiver fields
  const receiverName = document.getElementById("receiverName")?.value?.trim();
  const receiverCode = document.getElementById("receiverCountryCode")?.value?.trim();
  const receiverPhone = document.getElementById("receiverPhone")?.value?.trim();
  const deliveryNotes = document.getElementById("deliveryNotes")?.value?.trim();
  const deliveryImageInput = document.getElementById("deliveryImage")?.files;

  if (receiverName || receiverCode || receiverPhone || deliveryNotes || deliveryImageInput.length > 0) {
    requestData.receiver_name = receiverName || '';
    requestData.receiver_country_code = receiverCode || '';
    requestData.receiver_phone = receiverPhone || '';
    requestData.delivery_notes = deliveryNotes || '';

    if (deliveryImageInput.length > 0) {
      const file = deliveryImageInput[0];
      requestData.delivery_image = await new Promise((resolve) => {
        const reader = new FileReader();
        reader.onload = () => resolve(reader.result.split(",")[1]);
        reader.readAsDataURL(file);
      });
    }
  }

  document.getElementById("loaderOverlay").style.display = "flex";

  fetch("/admin/update-trip/<%= trip.trip_id %>", {
    method: "PUT",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify(requestData)
  })
  .then(res => res.json())
  .then(data => {
    document.getElementById("loaderOverlay").style.display = "none";

    if (data.trip) {
      Swal.fire({
        icon: "success",
        title: "Updated!",
        text: "Trip updated successfully."
      }).then(() => window.location.reload());
    } else {
      Swal.fire({ icon: "error", text: data.message });
    }
  })
  .catch(err => {
    document.getElementById("loaderOverlay").style.display = "none";
    Swal.fire({ icon: "error", text: "API error" });
    console.error(err);
  });
});
</script>
