document.addEventListener("DOMContentLoaded", () => {
  const modal = document.getElementById("modalDatosRocasa");
  const form = document.getElementById("formDatosRocasa");
  if (!modal || !form) return;

  const bootstrapModal = new bootstrap.Modal(modal);
  let isSubmitting = false;
  let timeoutBusquedaRecomendador = null;
  const recomendadorMap = new Map();

  const radioRecomendadoSi = document.getElementById("es_recomendado_si");
  const radioRecomendadoNo = document.getElementById("es_recomendado_no");
  const recomendadorRow = document.getElementById("recomendadorRow");
  const recomendadorBusquedaInput = document.getElementById("recomendador_busqueda");
  const recomendadorCurpInput = document.getElementById("curp_recomendador");
  const recomendadorDropdown = document.getElementById("recomendadorDropdown");
  const recomendadorSpinner = document.getElementById("recomendadorSpinner");
  const recomendadorCheck = document.getElementById("recomendadorCheck");
  const recomendadorSelected = document.getElementById("recomendadorSelected");
  const recomendadorNombre = document.getElementById("recomendadorNombre");
  const btnLimpiarRecomendador = document.getElementById("btnLimpiarRecomendador");

  function toggleCampoRecomendador() {
    if (!radioRecomendadoSi || !recomendadorRow || !recomendadorBusquedaInput || !recomendadorCurpInput) return;

    if (radioRecomendadoSi.checked) {
      recomendadorRow.style.display = "";
      recomendadorBusquedaInput.required = true;
      return;
    }

    recomendadorRow.style.display = "none";
    recomendadorBusquedaInput.required = false;
    limpiarSeleccionRecomendador();
  }

  function limpiarSeleccionRecomendador() {
    recomendadorBusquedaInput.value = "";
    recomendadorCurpInput.value = "";
    recomendadorMap.clear();
    if (recomendadorDropdown) recomendadorDropdown.style.display = "none";
    if (recomendadorSelected) recomendadorSelected.style.display = "none";
    if (recomendadorCheck) recomendadorCheck.style.display = "none";
    if (recomendadorSpinner) recomendadorSpinner.style.display = "none";
  }

  async function buscarRecomendadoresActivos(termino) {
    const res = await fetch(`../../backend/recruiter/buscar_recomendadores_activos.php?q=${encodeURIComponent(termino)}`);
    const data = await res.json();
    if (!data.success) return [];
    return Array.isArray(data.items) ? data.items : [];
  }

  function renderOpcionesRecomendador(items) {
    if (!recomendadorDropdown) return;

    recomendadorDropdown.innerHTML = "";
    recomendadorMap.clear();

    if (recomendadorSpinner) recomendadorSpinner.style.display = "none";

    if (items.length === 0) {
      recomendadorDropdown.innerHTML = '<div class="list-group-item text-muted"><i class="fas fa-info-circle me-2"></i>No se encontraron resultados</div>';
      recomendadorDropdown.style.display = "block";
      return;
    }

    items.forEach((item) => {
      const nombre = (item.nombre_completo || "").trim();
      const curp = (item.curp || "").trim();
      if (!nombre || !curp) return;

      recomendadorMap.set(curp, nombre);

      const itemEl = document.createElement("a");
      itemEl.href = "#";
      itemEl.className = "list-group-item list-group-item-action";
      itemEl.innerHTML = `
        <div class="d-flex align-items-center">
          <i class="fas fa-user-circle text-primary me-3 fs-5"></i>
          <div>
            <div class="fw-bold">${nombre}</div>
            <small class="text-muted"><i class="fas fa-id-card me-1"></i>${curp}</small>
          </div>
        </div>
      `;
      itemEl.addEventListener("click", (e) => {
        e.preventDefault();
        seleccionarRecomendador(curp, nombre);
      });
      recomendadorDropdown.appendChild(itemEl);
    });

    recomendadorDropdown.style.display = "block";
  }

  function seleccionarRecomendador(curp, nombre) {
    recomendadorCurpInput.value = curp;
    recomendadorBusquedaInput.value = nombre;
    if (recomendadorNombre) recomendadorNombre.textContent = nombre;
    if (recomendadorDropdown) recomendadorDropdown.style.display = "none";
    if (recomendadorSelected) recomendadorSelected.style.display = "block";
    if (recomendadorCheck) recomendadorCheck.style.display = "block";
    recomendadorBusquedaInput.classList.add("border-success");
  }

  if (btnLimpiarRecomendador) {
    btnLimpiarRecomendador.addEventListener("click", () => {
      limpiarSeleccionRecomendador();
      recomendadorBusquedaInput.classList.remove("border-success");
      recomendadorBusquedaInput.focus();
    });
  }

  if (radioRecomendadoSi && radioRecomendadoNo) {
    radioRecomendadoSi.addEventListener("change", toggleCampoRecomendador);
    radioRecomendadoNo.addEventListener("change", toggleCampoRecomendador);
  }

  if (recomendadorBusquedaInput) {
    recomendadorBusquedaInput.addEventListener("input", async () => {
      const termino = recomendadorBusquedaInput.value.trim();
      
      if (recomendadorCurpInput.value) {
        recomendadorCurpInput.value = "";
        if (recomendadorSelected) recomendadorSelected.style.display = "none";
        if (recomendadorCheck) recomendadorCheck.style.display = "none";
        recomendadorBusquedaInput.classList.remove("border-success");
      }

      if (timeoutBusquedaRecomendador) clearTimeout(timeoutBusquedaRecomendador);

      if (termino.length < 2) {
        if (recomendadorDropdown) recomendadorDropdown.style.display = "none";
        if (recomendadorSpinner) recomendadorSpinner.style.display = "none";
        recomendadorMap.clear();
        return;
      }

      if (recomendadorSpinner) recomendadorSpinner.style.display = "block";
      if (recomendadorDropdown) recomendadorDropdown.style.display = "none";

      timeoutBusquedaRecomendador = setTimeout(async () => {
        try {
          const items = await buscarRecomendadoresActivos(termino);
          renderOpcionesRecomendador(items);
        } catch (error) {
          console.error("Error al buscar recomendadores:", error);
          if (recomendadorSpinner) recomendadorSpinner.style.display = "none";
          if (recomendadorDropdown) {
            recomendadorDropdown.innerHTML = '<div class="list-group-item text-danger"><i class="fas fa-exclamation-triangle me-2"></i>Error al buscar</div>';
            recomendadorDropdown.style.display = "block";
          }
        }
      }, 300);
    });

    recomendadorBusquedaInput.addEventListener("focus", () => {
      if (recomendadorDropdown && recomendadorDropdown.children.length > 0 && !recomendadorCurpInput.value) {
        recomendadorDropdown.style.display = "block";
      }
    });

    document.addEventListener("click", (e) => {
      if (recomendadorDropdown && !recomendadorRow.contains(e.target)) {
        recomendadorDropdown.style.display = "none";
      }
    });
  }

  toggleCampoRecomendador();

  function seleccionarValorSelect(idSelect, valorBD) {
    const select = document.getElementById(idSelect);
    if (!select || !valorBD) return;

    const opciones = Array.from(select.options);
    const opcion = opciones.find(opt => opt.value.trim().toLowerCase() === valorBD.trim().toLowerCase());
    if (opcion) {
      select.value = opcion.value;
    } else {
      console.warn(`⚠️ No se encontró valor para el <select> #${idSelect}:`, valorBD);
    }
  }

  modal.addEventListener("show.bs.modal", async () => {
    const aspiranteId = document.getElementById("aspirante_id")?.value;
    if (!aspiranteId) return;

    try {
      const res = await fetch(`../../backend/recruiter/obtener_datos_rocasa.php?id=${aspiranteId}`);
      const data = await res.json();

      if (!data.success) {
        Swal.fire("Error", "No se pudo cargar la información del aspirante.", "error");
        return;
      }

      const campos = data.datos;
      if (!campos) {
        Swal.fire("Información", "No hay datos disponibles para este aspirante.", "info");
        return;
      }

      form.querySelector("#vacante_puesto").value = document.getElementById("vacante_puesto")?.value ?? '';
      form.querySelector("#vacante_codigo").value = document.getElementById("vacante_codigo")?.value ?? '';
      form.querySelector("#vacante_pdv").value = document.getElementById("vacante_pdv")?.value ?? '';

      // Asignar modalidad desde backend

      form.querySelector("#modalidad").value = campos.modalidad || '';
      console.log('Modalidad asignada desde backend:', campos.modalidad);

      // Esperar a que el DOM esté completamente renderizado antes de mostrar el campo
      setTimeout(function() {
        if (typeof window.toggleHorasLaborar === 'function') {
          window.toggleHorasLaborar();
        } else {
          try {
            const evt = new Event('change');
            document.getElementById('modalidad').dispatchEvent(evt);
          } catch (e) {}
        }
      }, 100);

      for (const clave in campos) {
        const customId = ['curp', 'rfc', 'nss'].includes(clave) ? `${clave}_rocasa` : clave;
        const input = document.getElementById(customId);
        if (input) input.value = campos[clave] ?? '';
      }

      seleccionarValorSelect('area', campos.area);
      seleccionarValorSelect('estado_civil', campos.estado_civil);

      const cpRFCInput = document.getElementById("cp_rfc");
      if (cpRFCInput) cpRFCInput.value = campos.cp_rfc ?? '';

      const correoPersonalInput = document.getElementById("correo_personal");
      if (correoPersonalInput) correoPersonalInput.value = campos.correo_personal ?? '';

      const telefonoInput = document.getElementById("telefono");
      if (telefonoInput) telefonoInput.value = campos.telefono ?? '';

      const checkbox = document.getElementById("tiene_vales");
      if (checkbox) checkbox.checked = campos.tiene_vales === "Sí";

      if (radioRecomendadoSi && radioRecomendadoNo) {
        if (campos.es_recomendado === "Sí") {
          radioRecomendadoSi.checked = true;
          radioRecomendadoNo.checked = false;
        } else if (campos.es_recomendado === "No") {
          radioRecomendadoNo.checked = true;
          radioRecomendadoSi.checked = false;
        } else {
          radioRecomendadoNo.checked = false;
          radioRecomendadoSi.checked = false;
        }
      }

      if (recomendadorBusquedaInput && recomendadorCurpInput) {
        const nombreRecomendador = (campos.recomendador_nombre || "").trim();
        const curpRecomendador = (campos.curp_recomendador || "").trim();

        if (nombreRecomendador && curpRecomendador) {
          seleccionarRecomendador(curpRecomendador, nombreRecomendador);
          recomendadorMap.set(curpRecomendador, nombreRecomendador);
        } else {
          limpiarSeleccionRecomendador();
        }
      }

      toggleCampoRecomendador();

    } catch (err) {
      console.error("Error al cargar datos Rocasa:", err);
      Swal.fire("Error", "Hubo un problema al obtener los datos.", "error");
    }
  });

  // 💵 Limpiar formato moneda antes de enviar
  const limpiarMoneda = (valor) => {
    return parseFloat(
      valor.replace(/[^0-9.]/g, '').trim()
    ) || 0;
  };

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

  const puesto = document.getElementById("vacante_puesto")?.value.trim();
  const codigo = document.getElementById("vacante_codigo")?.value.trim();
  const pdv = document.getElementById("vacante_pdv")?.value.trim();
  const curp = document.getElementById("curp_rocasa")?.value.trim();
  const esRecomendado = document.querySelector('input[name="es_recomendado"]:checked')?.value || "";
  const curpRecomendador = document.getElementById("curp_recomendador")?.value.trim() || "";

  // 🟠 Validar vacante seleccionada
  if (!puesto || !codigo || !pdv) {
    Swal.fire({
      icon: 'warning',
      title: 'Vacante no seleccionada',
      text: 'Debes seleccionar una vacante, incluyendo puesto y código, antes de guardar los datos.',
    });
    isSubmitting = false;
    return;
  }

  if (!esRecomendado) {
    Swal.fire({
      icon: 'warning',
      title: 'Campo obligatorio',
      text: 'Debes indicar si el aspirante es recomendado.',
    });
    isSubmitting = false;
    return;
  }

  if (esRecomendado === "Sí" && !curpRecomendador) {
    Swal.fire({
      icon: 'warning',
      title: 'Selecciona recomendador',
      text: 'Debes seleccionar un recomendador válido de la lista.',
    });
    isSubmitting = false;
    return;
  }

  // 💰 Limpiar inputs de moneda antes de usar FormData
  const sueldoInput = document.getElementById("sueldo_mensual");
  const valesInput = document.getElementById("vales");

  if (sueldoInput && sueldoInput.value)
    sueldoInput.value = limpiarMoneda(sueldoInput.value).toFixed(2);

  if (valesInput && valesInput.value)
    valesInput.value = limpiarMoneda(valesInput.value).toFixed(2);

  // 📦 Crear objeto de datos a enviar
  const formData = new FormData(form);
  const datos = {};

  for (const [key, value] of formData.entries()) {
    datos[key] = key === "tiene_vales"
      ? (form.tiene_vales.checked ? "Sí" : "")
      : value.trim();
  }

  datos.es_recomendado = esRecomendado;
  datos.curp_recomendador = esRecomendado === "Sí" ? curpRecomendador : "";
  // Asegurar que aspirante_id esté presente aunque no esté en el formulario
  datos.aspirante_id = document.getElementById("aspirante_id")?.value || '';

  try {
    console.log("🟢 Datos preparados antes de enviar:", datos);

    // 🔒 Cerrar modal de Datos Rocasa antes de mostrar Referencias ATT&T
    const modalElement = document.getElementById("modalDatosRocasa");
    const modalInstance = bootstrap.Modal.getInstance(modalElement);
    if (modalInstance) modalInstance.hide();

    // ⏱️ Esperar un pequeño tiempo para asegurar cierre y backdrop
    await new Promise(resolve => setTimeout(resolve, 300));

    // 📤 Mostrar modal de Referencias ATT&T
    const modalReferencias = new bootstrap.Modal(document.getElementById("modalReferenciasATTT"), {
      backdrop: 'static',
      focus: true
    });
    modalReferencias.show();

    // 📝 Esperar respuesta del usuario (APTO o NO APTO)
    const referenciaSeleccionada = await new Promise((resolve) => {
      const btnGuardar = document.getElementById("btnGuardarReferencia");

      const handler = () => {
        const seleccion = document.querySelector('input[name="referenciaATTT"]:checked')?.value;
        if (!seleccion) {
          Swal.fire('Selecciona una opción', 'Debes marcar una referencia antes de continuar.', 'info');
          return;
        }
        btnGuardar.removeEventListener("click", handler);
        resolve(seleccion);
      };

      btnGuardar.addEventListener("click", handler);
    });

    // ✅ Agregar al payload la selección y el curp
    datos.referenciaATTT = referenciaSeleccionada;
    datos.curp = curp;

    // 📤 Enviar los datos al backend
    const res = await fetch("../../backend/recruiter/guardar_datos_rocasa.php", {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify(datos),
    });

    const result = await res.json();

    if (result.success) {
      document.activeElement.blur();

      await Swal.fire("Éxito", "Los datos se guardaron correctamente.", "success");

      // 🔄 Recargar para actualizar vista
      location.reload();

    } else {
      Swal.fire("Error", result.message || "Error al guardar los datos.", "error");
    }

  } catch (error) {
    console.error("Error al guardar datos:", error);
    Swal.fire("Error", "Error inesperado al guardar.", "error");
  }

  isSubmitting = false;
});

});
