document.addEventListener("DOMContentLoaded", () => {
  const formEditarExpediente = document.getElementById("formEditarExpediente");
  const aspiranteId = document.getElementById("aspirante_id")?.value;
  const btnEnviarReferencias = document.getElementById("btnEnviarReferencias");
  const btnPreAlta = document.getElementById("btnEnviarPreAlta");
  const btnConfirmarPreAlta = document.getElementById("btnConfirmarPreAlta");

  // 🔒 Bloquear copiar, pegar y clic derecho en confirmaciones
  ["confirmar_curp", "confirmar_nss", "confirmar_rfc"].forEach(id => {
    const input = document.getElementById(id);
    if (input) {
      ["paste", "copy", "cut", "contextmenu"].forEach(evt =>
        input.addEventListener(evt, e => e.preventDefault())
      );
    }
  });

  // 🔠 Convertir CURP y RFC a mayúsculas automáticamente
  ["curp", "rfc", "confirmar_curp", "confirmar_rfc"].forEach(id => {
    const input = document.getElementById(id);
    if (input) {
      input.addEventListener("input", () => {
        input.value = input.value.toUpperCase();
      });
    }
  });

  // 🔢 Solo números para NSS (máx. 11 dígitos)
  const inputNSS = document.getElementById("nss");
  if (inputNSS) {
    inputNSS.addEventListener("input", () => {
      inputNSS.value = inputNSS.value.replace(/\D/g, "").slice(0, 11);
    });
  }

  // 📝 Envío de formulario
  if (formEditarExpediente) {
    formEditarExpediente.addEventListener("submit", async function (e) {
      e.preventDefault();

      const formData = new FormData(formEditarExpediente);
      const datos = Object.fromEntries(formData.entries());

      const confirmarCurp = document.getElementById("confirmar_curp")?.value.trim().toUpperCase();
      const confirmarNss = document.getElementById("confirmar_nss")?.value.trim();
      const confirmarRfc = document.getElementById("confirmar_rfc")?.value.trim().toUpperCase();

      const camposAEnviar = {};

      // Validar CURP solo si se llenó
      if (datos.curp || confirmarCurp) {
        if (!datos.curp || !confirmarCurp) {
          Swal.fire("Falta dato", "Debes capturar CURP y su confirmación.", "warning");
          return;
        }
        datos.curp = datos.curp.trim().toUpperCase();
        if (datos.curp !== confirmarCurp) {
          Swal.fire("CURP no coincide", "Verifica que ambas CURP sean iguales.", "warning");
          return;
        }
        const regexCURP = /^[A-Z]{4}\d{6}[HM][A-Z]{5}[A-Z0-9]{2}$/;
        if (!regexCURP.test(datos.curp)) {
          Swal.fire("CURP inválido", "Verifica la estructura del CURP.", "warning");
          return;
        }
        camposAEnviar.curp = datos.curp;
      }

      // Validar NSS solo si se llenó
      if (datos.nss || confirmarNss) {
        if (!datos.nss || !confirmarNss) {
          Swal.fire("Falta dato", "Debes capturar NSS y su confirmación.", "warning");
          return;
        }
        datos.nss = datos.nss.trim();
        if (datos.nss !== confirmarNss) {
          Swal.fire("NSS no coincide", "Verifica que ambos NSS sean iguales.", "warning");
          return;
        }
        if (!/^\d{11}$/.test(datos.nss)) {
          Swal.fire("NSS inválido", "Debe contener exactamente 11 dígitos numéricos.", "warning");
          return;
        }
        camposAEnviar.nss = datos.nss;
      }

      // Validar RFC solo si se llenó
      if (datos.rfc || confirmarRfc) {
        if (!datos.rfc || !confirmarRfc) {
          Swal.fire("Falta dato", "Debes capturar RFC y su confirmación.", "warning");
          return;
        }
        datos.rfc = datos.rfc.trim().toUpperCase();
        if (datos.rfc !== confirmarRfc) {
          Swal.fire("RFC no coincide", "Verifica que ambos RFC sean iguales.", "warning");
          return;
        }
        if (!/^[A-ZÑ&]{4}\d{6}[A-Z0-9]{3}$/.test(datos.rfc)) {
          Swal.fire("RFC inválido", "El formato del RFC no es válido.", "warning");
          return;
        }
        camposAEnviar.rfc = datos.rfc;
      }

      if (Object.keys(camposAEnviar).length === 0) {
        Swal.fire("Sin cambios", "No capturaste ningún dato nuevo.", "info");
        return;
      }

      try {
        const response = await fetch("../../backend/recruiter/actualizar_expediente.php", {
          method: "POST",
          headers: { "Content-Type": "application/json" },
          body: JSON.stringify({ ...camposAEnviar, aspirante_id: aspiranteId })
        });

        const res = await response.json();

        if (res.success) {
          Swal.fire({
            icon: 'success',
            title: 'Datos actualizados',
            text: '✅ El expediente fue guardado correctamente',
            timer: 2000,
            showConfirmButton: false
          }).then(() => location.reload());
        } else {
          Swal.fire("Error", res.message || "❌ Error al guardar los datos", "error");
        }
      } catch (err) {
        console.error("Error:", err);
        Swal.fire("Error", "❌ No se pudo conectar con el servidor", "error");
      }
    });
  }

  // 📨 Enviar a referencias
  btnEnviarReferencias?.addEventListener("click", async () => {
    const formData = new FormData();
    formData.append("aspirante_id", aspiranteId);

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

      if (result.status === "success") {
        Swal.fire({
          icon: 'success',
          title: 'Enviado a referencias',
          text: '✅ El aspirante fue enviado correctamente',
          timer: 2000,
          showConfirmButton: false
        });
      } else if (result.message.includes('ya fue enviado')) {
        Swal.fire({
          icon: 'warning',
          title: 'Advertencia',
          text: '⚠️ El aspirante ya había sido enviado a referencias.'
        });
      } else {
        Swal.fire({
          icon: 'error',
          title: 'Error',
          text: result.message || '❌ Error al enviar a referencias'
        });
      }
    } catch (error) {
      console.error("Error:", error);
      Swal.fire({
        icon: 'error',
        title: 'Error',
        text: '❌ Error al enviar a referencias, valida que el aspirante tenga CURP capturado'
      });
    }
  });

  // 📤 Mostrar modal pre alta
  btnPreAlta?.addEventListener("click", () => {
    const modalEl = document.getElementById("statusModal");

    if (!modalEl) {
      console.error("❌ No se encontró el modal #statusModal");
      return;
    }

    const statusSelect = modalEl.querySelector('select[name="nuevo_estatus"]');
    const comentarioTextarea = modalEl.querySelector('textarea[name="comentarios"]');

    if (statusSelect && comentarioTextarea) {
      statusSelect.value = "en_pre_alta";
      comentarioTextarea.value = "El candidato fue enviado a pre-alta";
    }

    try {
      const instancia = new bootstrap.Modal(modalEl);
      instancia.show();
    } catch (err) {
      console.error("❌ Error mostrando el modal:", err);
    }
  });

  // ✅ Confirmar envío a pre alta
  btnConfirmarPreAlta?.addEventListener("click", () => {
    console.log("✅ Confirmado para pre alta");
    // Puedes agregar aquí la lógica de envío si es necesario
  });
   // 🪞 Si ya hay datos previos, reflejarlos en confirmación automáticamente
  const autofillConfirmaciones = () => {
    const pares = [
      ["curp", "confirmar_curp"],
      ["rfc", "confirmar_rfc"],
      ["nss", "confirmar_nss"]
    ];

    pares.forEach(([originalId, confirmId]) => {
      const original = document.getElementById(originalId);
      const confirm = document.getElementById(confirmId);

      if (original && confirm && original.value.trim() !== "") {
        confirm.value = original.value.trim();
      }
    });
  };

  autofillConfirmaciones();
})