function toggleMenu() {
  const navList = document.querySelector("nav ul");
  navList.classList.toggle("active");
}

const form = document.querySelector(".form-wizard");
const progress = form.querySelector(".progress");
const stepsContainer = form.querySelector(".steps-container");
const steps = form.querySelectorAll(".step");
const stepIndicators = form.querySelectorAll(".progress-container li");
const prevButton = form.querySelector(".prev-btn");
const nextButton = form.querySelector(".next-btn");
const submitButton = form.querySelector(".submit-btn");
const editButton = form.querySelector("#editBtn");

let currentStep = 0;
let formData = JSON.parse(localStorage.getItem("formData")) || {};

// Update progres
const updateProgress = () => {
  let width = currentStep / (steps.length - 1);
  progress.style.transform = `scaleX(${width})`;

  // Update the step indicators
  stepIndicators.forEach((indicator, index) => {
    indicator.classList.toggle("current", currentStep === index);
    indicator.classList.toggle("done", currentStep > index);
  });

  // Update steps container
  stepsContainer.style.height = `${steps[currentStep].offsetHeight}px`;

  steps.forEach((step, index) => {
    step.style.transform = `translateX(${currentStep * -100}%)`;
    step.classList.toggle("current", currentStep === index);
  });

  updateButtons();
};

// Update button visibility
const updateButtons = () => {
  prevButton.hidden = currentStep === 0;
  nextButton.hidden = currentStep >= steps.length - 1;
  submitButton.hidden = currentStep < steps.length - 1;
  editButton.hidden = currentStep !== 2;
};

const isValidStep = () => {
  const fields = steps[currentStep].querySelectorAll("input, textarea, select");
  let valid = true;
  fields.forEach((field) => {
    const errorMessage = field.nextElementSibling;

    if (field.id === "fullname" && field.value.trim().length < 3) {
      valid = false;
      if (errorMessage)
        errorMessage.textContent = "Minimum 3 letters required.";
    } else if (field.id === "phone" && !/^\d{10}$/.test(field.value)) {
      valid = false;
      if (errorMessage)
        errorMessage.textContent = "Phone number must be 10 digits.";
    } else {
      if (errorMessage) errorMessage.textContent = "";
    }

    if (!field.checkValidity()) {
      valid = false;
    }
  });
  return valid;
};

// Save form data to localStorage
const saveData = () => {
  const fields = steps[currentStep].querySelectorAll("input, textarea, select");
  fields.forEach((field) => {
    formData[field.name] = field.value;
  });
  localStorage.setItem("formData", JSON.stringify(formData));
};

// Display data
const displayData = () => {
  const reviewSection = document.getElementById("review");
  reviewSection.innerHTML = "";

  // Iterate over all the steps to collect and display data
  steps.forEach((step) => {
    const inputs = step.querySelectorAll("input, select, textarea");
    inputs.forEach((input) => {
      if (input.type === "radio" && !input.checked) return; // Skip unchecked radios
      if (input.type === "checkbox") {
        // Handle checkboxes
        if (!formData[input.name]) formData[input.name] = [];
        if (input.checked) formData[input.name].push(input.value);
      } else {
        // Handle other input types
        formData[input.name] = input.value;
      }

      // Determine label for the field (use placeholder or aria-label if available)
      const label =
        input.placeholder ||
        input.ariaLabel ||
        input.closest("label")?.textContent ||
        input.name;

      // Display field data in the review section
      const p = document.createElement("p");
      if (Array.isArray(formData[input.name])) {
        p.textContent = `${label}: ${formData[input.name].join(", ")}`;
      } else {
        p.textContent = `${label}: ${formData[input.name]}`;
      }
      reviewSection.appendChild(p);
    });
  });
};

prevButton.addEventListener("click", (e) => {
  e.preventDefault();
  if (currentStep > 0) {
    saveData();
    currentStep--;
    updateProgress();
  }
});

nextButton.addEventListener("click", (e) => {
  e.preventDefault();
  if (isValidStep()) {
    saveData();
    if (currentStep < steps.length - 1) {
      currentStep++;
      updateProgress();
    }
  }
});

submitButton.addEventListener("click", (e) => {
  e.preventDefault();
  if (isValidStep()) {
    saveData();
    displayData();
    form.querySelector(".completed").hidden = false;
    stepsContainer.hidden = true;
  }
});

editButton.addEventListener("click", () => {
  const fields = steps[currentStep].querySelectorAll("input, textarea, select");
  fields.forEach((field) => {
    if (formData[field.name]) {
      field.value = formData[field.name];
    }
  });
  currentStep = 1;
  updateProgress();
});

updateProgress();
