document.addEventListener("DOMContentLoaded", () => {
  const modal = document.getElementById("modalDetalleEmpleado");
  const form = document.getElementById("formDetalleEmpleado");
  const bootstrapModal = new bootstrap.Modal(modal);
  let isSubmitting = false;

  const normalizarTexto = (texto) => {
    return texto
      ?.toString()
      .trim()
      .normalize("NFD")
      .replace(/[\u0300-\u036f]/g, "")
      .replace(/[\/.]/g, "")
      .replace(/\s+/g, " ")
      .toUpperCase() || '';
  };

  const seleccionarOpcionNormalizada = (selectId, valorBD) => {
    const select = document.getElementById(selectId);
    if (!select || !valorBD) return;
    const valorBDNormalizado = normalizarTexto(valorBD);
    for (const option of select.options) {
      const valorOptionNormalizado = normalizarTexto(option.value);
      if (valorBDNormalizado === valorOptionNormalizado) {
        select.value = option.value;
        break;
      }
    }
  };

  const rfcInputs = [document.getElementById("rfc1"), document.getElementById("rfc2")];
  rfcInputs.forEach(input => {
    input.addEventListener("input", () => {
      input.value = input.value.toUpperCase();
    });
  });

  modal.addEventListener("shown.bs.modal", async () => {
    const curp = document.getElementById("curpAspirante")?.value?.trim();
    if (!curp || curp.length !== 18) {
      console.warn("CURP inválido o no definido para autollenado");
      return;
    }

    try {
      const response = await fetch(`../../backend/recruiter/obtener_datos_por_curp.php?curp=${encodeURIComponent(curp)}`);
      const result = await response.json();

      if (result.success) {
        form.querySelector("input[name='NOMBRE']").value = result.NOMBRE;
        form.querySelector("input[name='APELLIDO_PATERNO']").value = result.APELLIDO_PATERNO;
        form.querySelector("input[name='APELLIDO_MATERNO']").value = result.APELLIDO_MATERNO;
        form.querySelector("input[name='CURP']").value = result.CURP;
        form.querySelector("input[name='PUESTO']").value = result.PUESTO;
        form.querySelector("input[name='NOMBRE_COMPLETO_PDV']").value = result.NOMBRE_COMPLETO_PDV;
        form.querySelector("input[name='ALMACEN']").value = result.ALMACEN;
        form.querySelector("input[name='CLAVE_UNICA_PDV']").value = result.CLAVE_UNICA_PDV;

        const medioTiempoCheckbox = document.getElementById("medioTiempo");
        medioTiempoCheckbox.checked = (result.MODALIDAD?.toUpperCase() === "MEDIO TIEMPO");
        medioTiempoCheckbox.disabled = true;

        const puesto = result.PUESTO?.toUpperCase() || "";
        let idPuesto = "";
        if (puesto.includes("SUBGERENTE")) idPuesto = "J00";
        else if (puesto.includes("EJECUTIVO")) idPuesto = "J0005111";
        else if (puesto.includes("GERENTE")) idPuesto = "J0005112";
        form.querySelector("input[name='ID_PUESTO']").value = idPuesto;

        if (result.CURP.length === 18) {
          const yy = result.CURP.slice(4, 6);
          const mm = result.CURP.slice(6, 8);
          const dd = result.CURP.slice(8, 10);
          const siglo = parseInt(yy) <= 24 ? "20" : "19";
          form.querySelector("input[name='FECHA_NACIMIENTO']").value = `${siglo}${yy}-${mm}-${dd}`;

          const genero = result.CURP.charAt(10).toUpperCase();
          if (["H", "M"].includes(genero)) {
            form.querySelector("select[name='GENERO']").value = genero;
          }
        }

        form.querySelector("input[name='estadoNacimiento']").value = result.estadoNacimiento || "";
        form.querySelector("input[name='ciudadNacimiento']").value = result.ciudadNacimiento || "";

        if (result.RFC) {
          document.getElementById("rfc1").value = result.RFC;
          document.getElementById("rfc2").value = result.RFC;
        }

        if (result.estado_civil) {
          seleccionarOpcionNormalizada('estado_civil', result.estado_civil);
        }

        if (result.FECHA_INGRESO) {
          const fechaInput = document.getElementById('fechaInicioActividades');
          if (fechaInput) {
            const fechaLimpia = result.FECHA_INGRESO.trim().slice(0, 10);
            fechaInput.value = fechaLimpia;
          }
        }
      } else {
        // Guarda el mensaje y cierra el modal, muestra la alerta en hidden.bs.modal
        window.mostrarVacanteAlert = {
          mensaje: result.message
        };
        bootstrapModal.hide();
        return;
      }
    } catch (error) {
      console.error("Error al obtener datos:", error);
      Swal.fire({ icon: "error", title: "Error", text: "No se pudieron obtener los datos del aspirante." });
    }
  });

  form.addEventListener("submit", async (e) => {
    e.preventDefault();
    if (isSubmitting) return;
    isSubmitting = true;

    const submitBtn = form.querySelector('button[type="submit"]');
    if (submitBtn) submitBtn.disabled = true;

    const fechaInicio = document.getElementById('fechaInicioActividades')?.value;
    if (!fechaInicio) {
      Swal.fire({ icon: 'warning', title: 'Falta la Fecha de Inicio', text: 'Por favor ingresa la fecha de inicio de actividades antes de guardar.' });
      document.getElementById('fechaInicioActividades').classList.add('is-invalid');
      isSubmitting = false;
      if (submitBtn) submitBtn.disabled = false;
      return;
    }

    const rfc1 = document.getElementById("rfc1").value.trim().toUpperCase();
    const rfc2 = document.getElementById("rfc2").value.trim().toUpperCase();
    if (!rfc1 || !rfc2 || rfc1 !== rfc2 || !/^[A-ZÑ&]{4}\d{6}[A-Z0-9]{3}$/.test(rfc1)) {
      Swal.fire({ icon: "error", title: "RFC inválido", text: "Verifica que ambos RFCs coincidan y tengan el formato correcto." });
      isSubmitting = false;
      if (submitBtn) submitBtn.disabled = false;
      return;
    }

    const nss1Input = document.getElementById("nss1");
    const nss2Input = document.getElementById("nss2");
    let nssValidado = "";
    if (nss1Input && nss2Input) {
      const nss1 = nss1Input.value.trim();
      const nss2 = nss2Input.value.trim();
      if (!/^\d{11}$/.test(nss1) || nss1 !== nss2) {
        Swal.fire({ icon: "error", title: "NSS inválido", text: "El NSS debe tener 11 dígitos y coincidir en ambos campos." });
        isSubmitting = false;
        if (submitBtn) submitBtn.disabled = false;
        return;
      }
      nssValidado = nss1;
    }

    const formData = new FormData(form);
    formData.append("RFC", rfc1);
    if (nssValidado) {
      formData.append("NSS", nssValidado);
    }

    try {
      const response = await fetch("../../backend/recruiter/guardar_detalle_empleado.php", {
        method: "POST",
        body: formData,
      });

      const result = await response.json();

      if (result.success) {
        Swal.fire({
          icon: "success",
          title: "Guardado",
          text: "✅ Los datos fueron guardados correctamente",
          timer: 2000,
          showConfirmButton: false
        }).then(() => {
          location.reload(); // 🔄 Recargar la página después del cierre del modal
        });

        bootstrapModal.hide();
      } else {
        Swal.fire({ icon: "error", title: "Error", text: result.message || "❌ No se pudo guardar la información" });
      }

    } catch (error) {
      console.error("Error al guardar:", error);
      Swal.fire({ icon: "error", title: "Error", text: "❌ Error al conectar con el servidor" });
    } finally {
      isSubmitting = false;
      if (submitBtn) submitBtn.disabled = false;
    }
  });

  modal.addEventListener("hidden.bs.modal", () => {
    form.reset();
    rfcInputs.forEach(input => input.classList.remove("is-invalid"));
    document.getElementById('fechaInicioActividades')?.classList.remove("is-invalid");
    document.querySelectorAll(".invalid-feedback").forEach(el => el.remove());

    // Mostrar el Swal solo si está pendiente mostrarlo
    if (window.mostrarVacanteAlert && window.mostrarVacanteAlert.mensaje) {
      let reloadTimeout = setTimeout(() => {
        window.location.reload();
      }, 120000);

      Swal.fire({
        icon: "warning",
        title: "Advertencia",
        text: window.mostrarVacanteAlert.mensaje,
        confirmButtonText: "OK",
        allowOutsideClick: false,
        allowEscapeKey: false
      }).then(() => {
        clearTimeout(reloadTimeout);
        window.location.reload();
      });
      // Limpia la bandera para futuras aperturas
      window.mostrarVacanteAlert = null;
    }
  });

  // --- Listener universal para asignar CURP antes de abrir el modal ---
  document.addEventListener("click", function (e) {
    // Puedes agregar más IDs según tus botones
    if (
      (e.target && e.target.id === "btnPreAlta") ||
      (e.target && e.target.id === "btnEnviarPlantilla")
    ) {
      const curp = e.target.getAttribute("data-curp") || "";
      const curpInput = document.getElementById("curpAspirante");
      if (curpInput) curpInput.value = curp;
      // Si necesitas más campos (vacante, etc.), aquí puedes agregarlos
    }
  });
});
