<?php
session_start();
header('Content-Type: application/json');

require_once __DIR__ . '/../db/conexion.php';
require_once __DIR__ . '/../utils/normalizar_texto.php';
require_once __DIR__ . '/../phpmailer/enviar_aviso_gerente.php';

$data = json_decode(file_get_contents("php://input"), true);
error_log("[🧾 JSON recibido]: " . json_encode($data));
$response = ['success' => false, 'message' => ''];

if (!isset($data['curp']) || strlen($data['curp']) !== 18) {
  $response['message'] = 'CURP inválido.';
  echo json_encode($response);
  exit;
}

$curp = limpiarTexto($data['curp']);

// Datos generales
$nombre = limpiarTexto($data['nombre']);
$apellido_paterno = limpiarTexto($data['apellido_paterno']);
$apellido_materno = limpiarTexto($data['apellido_materno']);
$telefono = limpiarTexto($data['telefono'], 'numerico');
$telefono_original = limpiarTexto($data['telefono_original'] ?? '', 'numerico'); // 🆕 para validar cambio
$direccion = limpiarTexto($data['direccion']);
$puesto = limpiarTexto($data['vacante_puesto']);
$codigo = limpiarTexto($data['vacante_codigo']);
$pdv = limpiarTexto($data['vacante_pdv']);
$modalidad = limpiarTexto($data['modalidad']);
$horas_laborar = limpiarTexto($data['horas_laborar'] ?? '');
$sueldo = floatval($data['sueldo_mensual'] ?? 0);
$rfc = limpiarTexto($data['rfc'], 'texto');
$nss = limpiarTexto($data['nss'], '');
$cpRFC = limpiarTexto($data['cp_rfc'] ?? '');
$correoPersonal = limpiarTexto($data['correo_personal'] ?? '');
$esRecomendado = ($data['es_recomendado'] ?? '') === 'Sí' ? 'Sí' : 'No';
$curpRecomendador = limpiarTexto($data['curp_recomendador'] ?? '');

if ($esRecomendado === 'Sí' && strlen($curpRecomendador) !== 18) {
  $response['message'] = 'Debes seleccionar un recomendador válido.';
  echo json_encode($response);
  exit;
}

if ($esRecomendado === 'Sí') {
  $stmtValidaRecomendador = $conn->prepare("SELECT CURP FROM Plantilla WHERE CURP = ? AND ESTATUS = 'ACTIVO' LIMIT 1");
  $stmtValidaRecomendador->bind_param("s", $curpRecomendador);
  $stmtValidaRecomendador->execute();
  $resValidaRecomendador = $stmtValidaRecomendador->get_result();
  if (!$resValidaRecomendador->fetch_assoc()) {
    $response['message'] = 'El recomendador seleccionado no está activo en Plantilla.';
    echo json_encode($response);
    exit;
  }
  $stmtValidaRecomendador->close();
}

// Datos del CURP
$fechaNacimiento = obtenerFechaNacimientoDesdeCURP($curp);
$genero = obtenerGeneroDesdeCURP($curp);
$estadoCiudad = obtenerEstadoCiudadDesdeCURP($curp, $conn);
$estado = limpiarTexto($estadoCiudad['estado'] ?? '');
$ciudad = limpiarTexto($estadoCiudad['ciudad'] ?? '');

// 🔄 ACTUALIZAR teléfono en aspirantes si cambió
if (!empty($telefono) && $telefono !== $telefono_original) {
  $stmtTel = $conn->prepare("UPDATE aspirantes SET telefono = ? WHERE curp = ?");
  $stmtTel->bind_param("ss", $telefono, $curp);
  $stmtTel->execute();
  if ($stmtTel->error) {
    error_log("❌ Error al actualizar teléfono en aspirantes: " . $stmtTel->error);
  } else {
    error_log("📲 Teléfono actualizado en aspirantes");
  }
}

// Guardar o actualizar datos en Plantilla
$stmtCheckPlantilla = $conn->prepare("SELECT CURP FROM Plantilla WHERE CURP = ?");
$stmtCheckPlantilla->bind_param("s", $curp);
$stmtCheckPlantilla->execute();
$stmtCheckPlantilla->store_result();
if ($stmtCheckPlantilla->num_rows === 0) {
  // INSERT si no existe
  if ($modalidad === 'MEDIO TIEMPO' && $horas_laborar !== '') {
    $stmtInsertPlantilla = $conn->prepare("INSERT INTO Plantilla (CURP, NOMBRES, `APELLIDO PATERNO`, `APELLIDO MATERNO`, PUESTO, posicionCode, `DEPARTAMENTO INTERNO`, MODALIDAD, `SUELDO MENSUAL`, direccion, `FECHA NACIMIENTO`, GENERO, ESTADO, CIUDAD, RFC, NSS, CPdeRFC, CORREO_PERSONAL, horasMedTiemp, Estatus) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'ACTIVO')");
    $stmtInsertPlantilla->bind_param("sssssssssssssssssss", $curp, $nombre, $apellido_paterno, $apellido_materno, $puesto, $codigo, $pdv, $modalidad, $sueldo, $direccion, $fechaNacimiento, $genero, $estado, $ciudad, $rfc, $nss, $cpRFC, $correoPersonal, $horas_laborar);
  } else {
    $stmtInsertPlantilla = $conn->prepare("INSERT INTO Plantilla (CURP, NOMBRES, `APELLIDO PATERNO`, `APELLIDO MATERNO`, PUESTO, posicionCode, `DEPARTAMENTO INTERNO`, MODALIDAD, `SUELDO MENSUAL`, direccion, `FECHA NACIMIENTO`, GENERO, ESTADO, CIUDAD, RFC, NSS, CPdeRFC, CORREO_PERSONAL, Estatus) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'ACTIVO')");
    $stmtInsertPlantilla->bind_param("ssssssssssssssssss", $curp, $nombre, $apellido_paterno, $apellido_materno, $puesto, $codigo, $pdv, $modalidad, $sueldo, $direccion, $fechaNacimiento, $genero, $estado, $ciudad, $rfc, $nss, $cpRFC, $correoPersonal);
  }
  $stmtInsertPlantilla->execute();
  if ($stmtInsertPlantilla->error) {
    error_log("❌ Error al insertar en Plantilla: " . $stmtInsertPlantilla->error);
  }
  $stmtInsertPlantilla->close();
} else {
  // UPDATE si existe
  if ($modalidad === 'MEDIO TIEMPO' && $horas_laborar !== '') {
    $stmtUpdatePlantilla = $conn->prepare("UPDATE Plantilla SET NOMBRES = ?, `APELLIDO PATERNO` = ?, `APELLIDO MATERNO` = ?, PUESTO = ?, posicionCode = ?, `DEPARTAMENTO INTERNO` = ?, MODALIDAD = ?, `SUELDO MENSUAL` = ?, direccion = ?, `FECHA NACIMIENTO` = ?, GENERO = ?, ESTADO = ?, CIUDAD = ?, RFC = ?, NSS = ?, CPdeRFC = ?, CORREO_PERSONAL = ?, horasMedTiemp = ?, Estatus = 'ACTIVO' WHERE CURP = ?");
    $stmtUpdatePlantilla->bind_param("sssssssdsssssssssss", $nombre, $apellido_paterno, $apellido_materno, $puesto, $codigo, $pdv, $modalidad, $sueldo, $direccion, $fechaNacimiento, $genero, $estado, $ciudad, $rfc, $nss, $cpRFC, $correoPersonal, $horas_laborar, $curp);
  } else {
    $stmtUpdatePlantilla = $conn->prepare("UPDATE Plantilla SET NOMBRES = ?, `APELLIDO PATERNO` = ?, `APELLIDO MATERNO` = ?, PUESTO = ?, posicionCode = ?, `DEPARTAMENTO INTERNO` = ?, MODALIDAD = ?, `SUELDO MENSUAL` = ?, direccion = ?, `FECHA NACIMIENTO` = ?, GENERO = ?, ESTADO = ?, CIUDAD = ?, RFC = ?, NSS = ?, CPdeRFC = ?, CORREO_PERSONAL = ?, horasMedTiemp = NULL, Estatus = 'ACTIVO' WHERE CURP = ?");
    $stmtUpdatePlantilla->bind_param("sssssssdssssssssss", $nombre, $apellido_paterno, $apellido_materno, $puesto, $codigo, $pdv, $modalidad, $sueldo, $direccion, $fechaNacimiento, $genero, $estado, $ciudad, $rfc, $nss, $cpRFC, $correoPersonal, $curp);
  }
  $stmtUpdatePlantilla->execute();
  if ($stmtUpdatePlantilla->error) {
    error_log("❌ Error al actualizar en Plantilla: " . $stmtUpdatePlantilla->error);
  }
  $stmtUpdatePlantilla->close();
}
$stmtCheckPlantilla->close();

// ✅ Actualizar estatus_actual a 'contratado'
$stmtEstatus = $conn->prepare("UPDATE aspirantes SET estatus_actual = 'contratado' WHERE curp = ?");
$stmtEstatus->bind_param("s", $curp);
$stmtEstatus->execute();

if ($stmtEstatus->error) {
  error_log("❌ Error al actualizar estatus_actual: " . $stmtEstatus->error);
} else {
  error_log("✅ estatus_actual actualizado a 'contratado'");
}

// ✏️ Insertar comentario automático en seguimiento_estatus
$stmtID = $conn->prepare("SELECT id FROM aspirantes WHERE curp = ?");
$stmtID->bind_param("s", $curp);
$stmtID->execute();
$resID = $stmtID->get_result();
$aspirante_id = null;

if ($fila = $resID->fetch_assoc()) {
    $aspirante_id = $fila['id'];
}

if ($aspirante_id) {
  if ($esRecomendado === 'Sí') {
    $attuidCaptura = $_SESSION['attuid'] ?? '';
    $idReclutador = null;

    if (!empty($attuidCaptura)) {
      $stmtReclutador = $conn->prepare("SELECT id FROM reclutadores WHERE attuid = ? LIMIT 1");
      $stmtReclutador->bind_param("s", $attuidCaptura);
      $stmtReclutador->execute();
      $resReclutador = $stmtReclutador->get_result();
      if ($rowReclutador = $resReclutador->fetch_assoc()) {
        $idReclutador = (int)$rowReclutador['id'];
      }
      $stmtReclutador->close();
    }

    if (!$idReclutador) {
      $response['message'] = 'No se pudo identificar al reclutador capturista.';
      echo json_encode($response);
      exit;
    }

    $stmtExisteRecomendado = $conn->prepare("SELECT id FROM recomendados WHERE id_aspirante = ? LIMIT 1");
    $stmtExisteRecomendado->bind_param("i", $aspirante_id);
    $stmtExisteRecomendado->execute();
    $resExisteRecomendado = $stmtExisteRecomendado->get_result();

    if ($rowExisteRecomendado = $resExisteRecomendado->fetch_assoc()) {
      $idRecomendado = (int)$rowExisteRecomendado['id'];
      $stmtUpdateRecomendado = $conn->prepare("UPDATE recomendados SET id_recomendador = ?, id_reclutador = ?, puesto = ? WHERE id = ?");
      $stmtUpdateRecomendado->bind_param("sisi", $curpRecomendador, $idReclutador, $puesto, $idRecomendado);
      $stmtUpdateRecomendado->execute();
      if ($stmtUpdateRecomendado->error) {
        error_log("❌ Error al actualizar recomendados: " . $stmtUpdateRecomendado->error);
      }
      $stmtUpdateRecomendado->close();
    } else {
      $stmtInsertRecomendado = $conn->prepare("INSERT INTO recomendados (id_aspirante, id_recomendador, id_reclutador, puesto) VALUES (?, ?, ?, ?)");
      $stmtInsertRecomendado->bind_param("isis", $aspirante_id, $curpRecomendador, $idReclutador, $puesto);
      $stmtInsertRecomendado->execute();
      if ($stmtInsertRecomendado->error) {
        error_log("❌ Error al insertar en recomendados: " . $stmtInsertRecomendado->error);
      }
      $stmtInsertRecomendado->close();
    }

    $stmtExisteRecomendado->close();
  } else {
    $stmtDeleteRecomendado = $conn->prepare("DELETE FROM recomendados WHERE id_aspirante = ?");
    $stmtDeleteRecomendado->bind_param("i", $aspirante_id);
    $stmtDeleteRecomendado->execute();
    $stmtDeleteRecomendado->close();
  }
} else {
  $response['message'] = 'No se encontró el aspirante para registrar recomendado.';
  echo json_encode($response);
  exit;
}

if ($aspirante_id) {
    $comentario = "Se realizó la firma de contrato";
    $estatus = "contratado";
    $usuario = $_SESSION['nombre_usuario'] ?? 'SISTEMA';
    $fecha = date('Y-m-d H:i:s');

    $stmtComentario = $conn->prepare("INSERT INTO seguimiento_estatus (aspirante_id, estatus, comentario, fecha, usuario) VALUES (?, ?, ?, ?, ?)");
    $stmtComentario->bind_param("issss", $aspirante_id, $estatus, $comentario, $fecha, $usuario);
    $stmtComentario->execute();

    if ($stmtComentario->error) {
        error_log("❌ Error al insertar comentario en seguimiento_estatus: " . $stmtComentario->error);
    } else {
        error_log("📝 Comentario insertado en seguimiento_estatus para aspirante_id = $aspirante_id");
    }
} else {
    error_log("❌ No se encontró aspirante con CURP: $curp para insertar comentario.");
}

/*
if (stripos($puesto, 'GERENTE') !== false && stripos($puesto, 'SUBGERENTE') === false) {
  $nombreCompletoCorreo = $apellido_paterno . ' ' . $apellido_materno . ' ' . $nombre;

  bonosGarantiaGerentes($conn, $curp, $nombreCompletoCorreo, 10000);

  $nombreCompleto = trim($nombre . ' ' . $apellido_paterno . ' ' . $apellido_materno);
  $correoEnviado = enviarCorreoSolicitudBonoGarantia($nombreCompleto, $pdv);
  if ($correoEnviado) {
    error_log("Correo de solicitud de bono garantia enviado");
  } else {
    error_log("Error al enviar correo de solicitud de bono garantia");
  }
}
*/

if (stripos($puesto, 'GERENTE') !== false && stripos($puesto, 'SUBGERENTE') === false && $pdv !== 'GRP TDA ADMINISTRACION MER') {
  error_log(" Enviando correo de nuevo gerente...");
  $resultadoCorreo = enviarCorreoNuevoGerente();
}

function bonosGarantiaGerentes($conn, $curp, $nombre, $cantidad): void {
  $fechaIngreso = date('Y-m-d');
  $fechaFin = date('Y-m-d', strtotime('+90 days', strtotime($fechaIngreso)));

  $sql = "INSERT INTO bonosGarantia (`CURP`, `Nombre`, `Cantidad`, `fechaIngreso`, `fechaFin`) VALUES (?, ?, ?, ?, ?)";
  $stmt = $conn->prepare($sql);
  $stmt->bind_param("ssdss", $curp, $nombre, $cantidad, $fechaIngreso, $fechaFin);
  $stmt->execute();
}


// Datos personales
$area = limpiarTexto($data['area'] ?? '');
$estado_civil = limpiarTexto($data['estado_civil'] ?? '');
$numero_hijos = limpiarTexto($data['numero_hijos'] ?? '0', 'numerico');
$grupo_sanguineo = limpiarTexto($data['tipo_sanguineo'] ?? '');
$alergias = limpiarTexto($data['alergias'] ?? '');
$enfermedades = limpiarTexto($data['enfermedades'] ?? '');
$contacto_emergencia = limpiarTexto($data['contacto_emergencia'] ?? '');
$tel_emergencia = limpiarTexto($data['tel_emergencia'] ?? '', 'numerico');
$talla = limpiarTexto($data['talla'] ?? '');

// Guardar datos personales con REPLACE INTO
if ($area || $estado_civil || $numero_hijos || $grupo_sanguineo || $alergias || $enfermedades || $contacto_emergencia || $tel_emergencia || $talla || $telefono) {
  // Validar que el CURP exista en Plantilla
  $stmtCheckPlantilla = $conn->prepare("SELECT CURP FROM Plantilla WHERE CURP = ?");
  $stmtCheckPlantilla->bind_param("s", $curp);
  $stmtCheckPlantilla->execute();
  $stmtCheckPlantilla->store_result();
  if ($stmtCheckPlantilla->num_rows === 0) {
    $stmtInsertPlantilla = $conn->prepare("INSERT INTO Plantilla (CURP, NOMBRES, `APELLIDO PATERNO`, `APELLIDO MATERNO`) VALUES (?, ?, ?, ?)");
    $stmtInsertPlantilla->bind_param("ssss", $curp, $nombre, $apellido_paterno, $apellido_materno);
    $stmtInsertPlantilla->execute();
    $stmtInsertPlantilla->close();
  }
  $stmtCheckPlantilla->close();
  // Validar que el CURP exista en Plantilla_datos_personales
  $stmtCheckDatosPersonales = $conn->prepare("SELECT CURP FROM Plantilla_datos_personales WHERE CURP = ?");
  $stmtCheckDatosPersonales->bind_param("s", $curp);
  $stmtCheckDatosPersonales->execute();
  $stmtCheckDatosPersonales->store_result();
  if ($stmtCheckDatosPersonales->num_rows === 0) {
    $stmtInsertDatosPersonales = $conn->prepare("INSERT INTO Plantilla_datos_personales (CURP) VALUES (?)");
    $stmtInsertDatosPersonales->bind_param("s", $curp);
    $stmtInsertDatosPersonales->execute();
    $stmtInsertDatosPersonales->close();
  }
  $stmtCheckDatosPersonales->close();
  // Ahora sí, guardar en Plantilla_datos_personales
  $stmt = $conn->prepare("REPLACE INTO Plantilla_datos_personales (CURP, Area, estado_civil, Numero_Hijos, Grupo_sanguineo, Alergenos, Enfermedades_cronicas, Nombre_contacto_emergen, Tel_contacto_emergen, Talla, Tel_personal) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
  $stmt->bind_param("sssssssssss",
    $curp,
    $area,
    $estado_civil,
    $numero_hijos,
    $grupo_sanguineo,
    $alergias,
    $enfermedades,
    $contacto_emergencia,
    $tel_emergencia,
    $talla,
    $telefono
  );
  $stmt->execute();
  if ($stmt->error) {
    error_log("❌ Error al guardar datos_personales: " . $stmt->error);
  }
}

// Datos financieros
$vales = limpiarTexto($data['vales'], 'numerico');
$banco = limpiarTexto($data['banco']);
$tarjeta = limpiarTexto($data['tarjeta'], 'numerico');
$cuenta_clabe = limpiarTexto($data['cuenta_clabe'], 'numerico');
$numero_cuenta = limpiarTexto($data['numero_cuenta'] ?? '', 'numerico');
$tieneVales = $data['tiene_vales'] === "Sí" ? "Sí" : "";
$num_empleado_vales = limpiarTexto($data['numero_empleado_vales']);
$numero_casa_fiscal = limpiarTexto($data['numero_casa_fiscal'] ?? '');
$calle_fiscal = limpiarTexto($data['calle_fiscal'] ?? '');
$colonia_fiscal = limpiarTexto($data['colonia_fiscal'] ?? '');
$clave_municipio_fiscal = limpiarTexto($data['clave_municipio_fiscal'] ?? '');
$clave_estado_fiscal = limpiarTexto($data['clave_estado_fiscal'] ?? '');
$estado_fiscal = limpiarTexto($data['estado_fiscal'] ?? '');
$municipio_fiscal = limpiarTexto($data['municipio_fiscal'] ?? '');
$fonacot = limpiarTexto($data['fonacot'] ?? ''); // Nuevo campo Fonacot

// NUEVO: Lógica para Registro y Tipo_tarj según el checkbox de Banorte Asignada
$banorte_asignada = !empty($data['banorte_asignada']) && ($data['banorte_asignada'] === true || $data['banorte_asignada'] === 'on' || $data['banorte_asignada'] === '1');
if ($banorte_asignada) {
    $registro = '01';
    $tipo_tarj = '03';
} else {
    $registro = '02';
    $tipo_tarj = '04';
}

// Guardar datos financieros con REPLACE INTO
if ($vales || $banco || $tarjeta || $cuenta_clabe || $numero_cuenta || $tieneVales || $num_empleado_vales || $numero_casa_fiscal || $calle_fiscal || $colonia_fiscal || $clave_municipio_fiscal || $clave_estado_fiscal || $estado_fiscal || $municipio_fiscal || $registro || $tipo_tarj || $fonacot) {
  // Validar que el CURP exista en Plantilla_datos_financieros
  $stmtCheckDatosFin = $conn->prepare("SELECT CURP FROM Plantilla_datos_financieros WHERE CURP = ?");
  $stmtCheckDatosFin->bind_param("s", $curp);
  $stmtCheckDatosFin->execute();
  $stmtCheckDatosFin->store_result();
  if ($stmtCheckDatosFin->num_rows === 0) {
    $stmtInsertDatosFin = $conn->prepare("INSERT INTO Plantilla_datos_financieros (CURP) VALUES (?)");
    $stmtInsertDatosFin->bind_param("s", $curp);
    $stmtInsertDatosFin->execute();
    $stmtInsertDatosFin->close();
  }
  $stmtCheckDatosFin->close();
  $stmt = $conn->prepare("REPLACE INTO Plantilla_datos_financieros (CURP, Vales, Banco, Tarjeta, Cuenta_clave, Numero_cuenta, Tiene_vales, Numero_empleado_vales, Numero_fiscal, Calle_fiscal, Colonia_fiscal, clave_municipio, clave_estado, Estado_fiscal, Municipio_fiscal, Registro, Tipo_tarj, Fonacot) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
  $stmt->bind_param("ssssssssssssssssss",
    $curp, $vales, $banco, $tarjeta, $cuenta_clabe, $numero_cuenta, $tieneVales, $num_empleado_vales, $numero_casa_fiscal, $calle_fiscal, $colonia_fiscal, $clave_municipio_fiscal, $clave_estado_fiscal, $estado_fiscal, $municipio_fiscal, $registro, $tipo_tarj, $fonacot
  );
  $stmt->execute();
  if ($stmt->error) {
    error_log("❌ Error al guardar datos_financieros: " . $stmt->error);
  }
}

// CURP en otros
// Guardar registro en Plantilla_otros con REPLACE INTO
if ($curp) {
  // Validar que el CURP exista en Plantilla_otros
  $stmtCheckOtros = $conn->prepare("SELECT CURP FROM Plantilla_otros WHERE CURP = ?");
  $stmtCheckOtros->bind_param("s", $curp);
  $stmtCheckOtros->execute();
  $stmtCheckOtros->store_result();
  if ($stmtCheckOtros->num_rows === 0) {
    $stmtInsertOtros = $conn->prepare("INSERT INTO Plantilla_otros (CURP) VALUES (?)");
    $stmtInsertOtros->bind_param("s", $curp);
    $stmtInsertOtros->execute();
    $stmtInsertOtros->close();
  }
  $stmtCheckOtros->close();
  $stmt = $conn->prepare("REPLACE INTO Plantilla_otros (CURP) VALUES (?)");
  $stmt->bind_param("s", $curp);
  $stmt->execute();
}

// Guardar estatus de referencia en la tabla Referencias si viene el dato
if (!empty($data['referenciaATTT'])) {
    $estatusReferencia = limpiarTexto($data['referenciaATTT']);
    // Buscar y actualizar solo en la tabla Referencias (mayúsculas)
    $checkUpper = $conn->query("SHOW TABLES LIKE 'Referencias'");
    if ($checkUpper && $checkUpper->num_rows > 0) {
        $tablaReferencias = 'Referencias';
        $query = "UPDATE `Referencias` SET Estatus = ? WHERE `CURP` = ?";
        $updateRef = $conn->prepare($query);
        $updateRef->bind_param("ss", $estatusReferencia, $curp);
        $updateRef->execute();
        if ($updateRef->error) {
            error_log("❌ Error al actualizar estatus en Referencias: " . $updateRef->error);
        } else {
            error_log("✅ Estatus de referencia actualizado en Referencias para CURP $curp");
        }
        // Si el estatus es 'No apto' o 'No recontratable', actualizar Color a 'Rojo'
        if (strtolower($estatusReferencia) === 'no apto' || strtolower($estatusReferencia) === 'no recontratable') {
            $queryColor = "UPDATE `Referencias` SET Color = 'Rojo' WHERE `CURP` = ?";
            $updateColor = $conn->prepare($queryColor);
            $updateColor->bind_param("s", $curp);
            $updateColor->execute();
            if ($updateColor->error) {
                error_log("❌ Error al actualizar Color en Referencias: " . $updateColor->error);
            } else {
                error_log("✅ Color actualizado a Rojo en Referencias para CURP $curp");
            }
            // Enviar correo a POC
            require_once __DIR__ . '/../phpmailer/correo_referencia_noapto.php';
            $nombreCompleto = trim($nombre . ' ' . $apellido_paterno . ' ' . $apellido_materno);
            $enviado = enviarCorreoReferenciaNoApto($nombreCompleto, $puesto, $pdv, date('Y-m-d'));
            if ($enviado) {
                error_log("📧 Correo de NO APTO/NO RECONTRATABLE enviado a POC");
            } else {
                error_log("❌ Error al enviar correo de NO APTO/NO RECONTRATABLE");
            }
        }
    } else {
        error_log("❌ No se encontró la tabla Referencias para actualizar estatus");
    }
}

$response['success'] = true;
$response['message'] = 'Datos guardados correctamente';
echo json_encode($response);
exit;

// 📦 Funciones auxiliares
function obtenerFechaNacimientoDesdeCURP($curp) {
  $anio = substr($curp, 4, 2);
  $mes = substr($curp, 6, 2);
  $dia = substr($curp, 8, 2);
  $siglo = ((int)$anio >= 0 && (int)$anio <= 25) ? '20' : '19';
  return "$siglo$anio-$mes-$dia";
}

function obtenerGeneroDesdeCURP($curp) {
  $g = strtoupper(substr($curp, 10, 1));
  return $g === 'H' ? 'H' : 'M';
}

function obtenerEstadoCiudadDesdeCURP($curp, $conn) {
  $clave = substr($curp, 11, 2);
  $sql = "SELECT estado, capital FROM catalogo_estados_curp WHERE clave = ?";
  $stmt = $conn->prepare($sql);
  $stmt->bind_param("s", $clave);
  $stmt->execute();
  $res = $stmt->get_result();
  $row = $res->fetch_assoc();
  return $row ? ['estado' => $row['estado'], 'ciudad' => $row['capital']] : ['estado' => null, 'ciudad' => null];
}
