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

if (!isset($_SESSION['attuid']) || ($_SESSION['rol'] ?? '') !== 'subdistribuidor') {
    echo json_encode(['success' => false, 'message' => 'Acceso denegado']);
    exit;
}

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

// --- FUNCION AUXILIAR PARA ENCONTRAR NOMBRE DE TABLA CORRECTO ---
function tablaExistente($conn, $nombre1, $nombre2) {
    $result = $conn->query("SHOW TABLES LIKE '$nombre1'");
    if ($result && $result->num_rows > 0) return $nombre1;
    $result = $conn->query("SHOW TABLES LIKE '$nombre2'");
    if ($result && $result->num_rows > 0) return $nombre2;
    return false;
}

// 1. Recibir y limpiar datos
$nombre             = limpiarTexto($_POST['nombre'] ?? '');
$apellido_paterno   = limpiarTexto($_POST['apellido_paterno'] ?? '');
$apellido_materno   = limpiarTexto($_POST['apellido_materno'] ?? '');
$curp               = limpiarTexto($_POST['curp'] ?? '');
$nss                = limpiarTexto($_POST['nss'] ?? '', 'numerico');
$rfc                = limpiarTexto($_POST['rfc'] ?? '');
$correo             = limpiarTexto($_POST['correo'] ?? '', 'email');
$telefono           = limpiarTexto($_POST['telefono'] ?? '', 'numerico');
$puesto             = limpiarTexto($_POST['puesto'] ?? '');
$ubicacion          = limpiarTexto($_POST['ubicacion'] ?? '');
$direccion          = limpiarTexto($_POST['direccion'] ?? '');
$fecha_registro     = date('Y-m-d H:i:s');
$attuid             = $_SESSION['attuid'];
$estatus_actual     = 'asignado';
$registrado_por     = $attuid;
$subdistribuidor    = 1;

// Información médica/personales/contacto
$estado_civil           = limpiarTexto($_POST['estado_civil'] ?? '');
$Numero_Hijos           = limpiarTexto($_POST['Numero_Hijos'] ?? '', 'numerico');
$Talla                  = limpiarTexto($_POST['Talla'] ?? '');
$Grupo_sanguineo        = limpiarTexto($_POST['Grupo_sanguineo'] ?? '');
$Alergenos              = limpiarTexto($_POST['Alergenos'] ?? '');
$Enfermedades_cronicas  = limpiarTexto($_POST['Enfermedades_cronicas'] ?? '');
$Nombre_contacto_emergen= limpiarTexto($_POST['Nombre_contacto_emergen'] ?? '');
$Tel_contacto_emergen   = limpiarTexto($_POST['Tel_contacto_emergen'] ?? '');
$Tel_personal           = limpiarTexto($_POST['Tel_personal'] ?? '', 'numerico');

// ----------- 1.5. Obtener ESTADO y CIUDAD desde CURP -----------
$clave_estado = strtoupper(substr($curp, 11, 2));
$estadoNac = '';
$ciudadNac = '';
$stmtEstado = $conn->prepare("SELECT estado, capital FROM catalogo_estados_curp WHERE clave = ?");
$stmtEstado->bind_param("s", $clave_estado);
$stmtEstado->execute();
$stmtEstado->bind_result($estadoNac, $ciudadNac);
$stmtEstado->fetch();
$stmtEstado->close();
if (empty($estadoNac)) $estadoNac = '';
if (empty($ciudadNac)) $ciudadNac = '';

// ----------- 1.7. Generar FOLIO consecutivo + formato correcto -----------
$tipoPuesto = '';
if (stripos($puesto, 'gerente') !== false) {
    $tipoPuesto = 'G';
} elseif (stripos($puesto, 'ejecutivo') !== false) {
    $tipoPuesto = 'E';
} else {
    $tipoPuesto = 'O';
}
$sqlUltimoFolio = "SELECT folio FROM aspirantes WHERE folio REGEXP '^[0-9]+25-[GE]SUB$' ORDER BY id DESC LIMIT 1";
$resultFolio = $conn->query($sqlUltimoFolio);
$ultimoConsecutivo = 100;
if ($resultFolio && $row = $resultFolio->fetch_assoc()) {
    if (preg_match('/^(\d+)25-[GE]SUB$/', $row['folio'], $matches)) {
        $ultimoConsecutivo = intval($matches[1]);
    }
}
$nuevoConsecutivo = $ultimoConsecutivo + 1;
$folio = $nuevoConsecutivo . "25-" . $tipoPuesto . "SUB";

// ----------- 2. Insert/Update en aspirantes -----------
$stmt = $conn->prepare("SELECT id FROM aspirantes WHERE curp = ? OR nss = ?");
$stmt->bind_param("ss", $curp, $nss);
$stmt->execute();
$stmt->store_result();
if ($stmt->num_rows > 0) {
    $stmt->close();
    $stmtUpdate = $conn->prepare("UPDATE aspirantes SET nombre=?, apellido_paterno=?, apellido_materno=?, rfc=?, correo=?, telefono=?, puesto=?, ubicacion=?, registrado_por=? WHERE curp=?");
    $stmtUpdate->bind_param("ssssssssss", $nombre, $apellido_paterno, $apellido_materno, $rfc, $correo, $telefono, $puesto, $ubicacion, $registrado_por, $curp);
    $stmtUpdate->execute();
    $stmtUpdate->close();
} else {
    $stmt->close();
    $stmtInsert = $conn->prepare("INSERT INTO aspirantes (folio, nombre, apellido_paterno, apellido_materno, curp, nss, rfc, correo, telefono, puesto, fecha_registro, attuid, ubicacion, estatus_actual, registrado_por, subdistribuidor) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
    $stmtInsert->bind_param(
        "sssssssssssssssi",
        $folio, $nombre, $apellido_paterno, $apellido_materno, $curp, $nss, $rfc, $correo, $telefono, $puesto,
        $fecha_registro, $attuid, $ubicacion, $estatus_actual, $registrado_por, $subdistribuidor
    );
    $stmtInsert->execute();
    $stmtInsert->close();
}

// ----------- 3. Insert/Update en Plantilla (básico, ahora incluye ESTADO y CIUDAD) -----------
$tablaPlantilla = tablaExistente($conn, 'Plantilla', 'plantilla');
if ($tablaPlantilla) {
    $stmt = $conn->prepare("SELECT CURP FROM $tablaPlantilla WHERE CURP=?");
    $stmt->bind_param("s", $curp);
    $stmt->execute();
    $stmt->store_result();
    if ($stmt->num_rows > 0) {
        $stmt->close();
        $stmtUpdate = $conn->prepare("UPDATE $tablaPlantilla SET NOMBRES=?, `APELLIDO PATERNO`=?, `APELLIDO MATERNO`=?, NSS=?, RFC=?, PUESTO=?, `DEPARTAMENTO INTERNO`=?, DIRECCION=?, ESTADO=?, CIUDAD=? WHERE CURP=?");
        $stmtUpdate->bind_param("sssssssssss", $nombre, $apellido_paterno, $apellido_materno, $nss, $rfc, $puesto, $ubicacion, $direccion, $estadoNac, $ciudadNac, $curp);
        $stmtUpdate->execute();
        $stmtUpdate->close();
    } else {
        $stmt->close();
        $stmtInsert = $conn->prepare("INSERT INTO $tablaPlantilla (CURP, NOMBRES, `APELLIDO PATERNO`, `APELLIDO MATERNO`, NSS, RFC, PUESTO, `DEPARTAMENTO INTERNO`, DIRECCION, ESTADO, CIUDAD) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
        $stmtInsert->bind_param("sssssssssss", $curp, $nombre, $apellido_paterno, $apellido_materno, $nss, $rfc, $puesto, $ubicacion, $direccion, $estadoNac, $ciudadNac);
        $stmtInsert->execute();
        $stmtInsert->close();
    }
    // --- Validar en aspirantes si el CURP con id más alto tiene subdistribuidor=1 antes de actualizar tipoComision ---
    if (!empty($curp)) {
        $sqlCheckSub = "SELECT subdistribuidor FROM aspirantes WHERE CURP = ? ORDER BY id DESC LIMIT 1";
        $stmtCheckSub = $conn->prepare($sqlCheckSub);
        $stmtCheckSub->bind_param("s", $curp);
        $stmtCheckSub->execute();
        $stmtCheckSub->bind_result($subdist_db);
        if ($stmtCheckSub->fetch() && intval($subdist_db) === 1) {
            $stmtCheckSub->close();
            $stmtTipoComision = $conn->prepare("UPDATE $tablaPlantilla SET tipoComision = 'SUBDISTRIBUIDOR' WHERE CURP = ?");
            $stmtTipoComision->bind_param("s", $curp);
            $stmtTipoComision->execute();
            $stmtTipoComision->close();
        } else {
            $stmtCheckSub->close();
        }
    }
} else {
    error_log("❌ No se encontró la tabla Plantilla ni plantilla.");
}

// ----------- 4. Insert/Update en plantilla_datos_personales -----------
$tablaDatosPersonales = tablaExistente($conn, 'plantilla_datos_personales', 'Plantilla_datos_personales');
if ($tablaDatosPersonales) {
    $stmt = $conn->prepare("SELECT CURP FROM $tablaDatosPersonales WHERE CURP=?");
    $stmt->bind_param("s", $curp);
    $stmt->execute();
    $stmt->store_result();
    if ($stmt->num_rows > 0) {
        $stmt->close();
        $stmtUpdate = $conn->prepare("UPDATE $tablaDatosPersonales SET estado_civil=?, Numero_Hijos=?, Talla=?, Grupo_sanguineo=?, Alergenos=?, Enfermedades_cronicas=?, Nombre_contacto_emergen=?, Tel_contacto_emergen=?, Tel_personal=? WHERE CURP=?");
        $stmtUpdate->bind_param("sissssssss", $estado_civil, $Numero_Hijos, $Talla, $Grupo_sanguineo, $Alergenos, $Enfermedades_cronicas, $Nombre_contacto_emergen, $Tel_contacto_emergen, $Tel_personal, $curp);
        $stmtUpdate->execute();
        $stmtUpdate->close();
    } else {
        $stmt->close();
        $stmtInsert = $conn->prepare("INSERT INTO $tablaDatosPersonales (CURP, estado_civil, Numero_Hijos, Talla, Grupo_sanguineo, Alergenos, Enfermedades_cronicas, Nombre_contacto_emergen, Tel_contacto_emergen, Tel_personal) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
        $stmtInsert->bind_param("ssisssssss", $curp, $estado_civil, $Numero_Hijos, $Talla, $Grupo_sanguineo, $Alergenos, $Enfermedades_cronicas, $Nombre_contacto_emergen, $Tel_contacto_emergen, $Tel_personal);
        $stmtInsert->execute();
        $stmtInsert->close();
    }
} else {
    error_log("❌ No se encontró la tabla plantilla_datos_personales ni Plantilla_datos_personales.");
}

// ----------- 5. Insert en plantilla_datos_financieros (si no existe) -----------
$tablaDatosFin = tablaExistente($conn, 'plantilla_datos_financieros', 'Plantilla_datos_financieros');
if ($tablaDatosFin) {
    $stmt = $conn->prepare("SELECT CURP FROM $tablaDatosFin WHERE CURP=?");
    $stmt->bind_param("s", $curp);
    $stmt->execute();
    $stmt->store_result();
    if ($stmt->num_rows == 0) {
        $stmt->close();
        $stmtInsert = $conn->prepare("INSERT INTO $tablaDatosFin (CURP) VALUES (?)");
        $stmtInsert->bind_param("s", $curp);
        $stmtInsert->execute();
        $stmtInsert->close();
    } else {
        $stmt->close();
    }
} else {
    error_log("❌ No se encontró la tabla plantilla_datos_financieros ni Plantilla_datos_financieros.");
}

// ----------- 6. Insert en plantilla_otros (si no existe) -----------
$tablaOtros = tablaExistente($conn, 'plantilla_otros', 'Plantilla_otros');
if ($tablaOtros) {
    $stmt = $conn->prepare("SELECT CURP FROM $tablaOtros WHERE CURP=?");
    $stmt->bind_param("s", $curp);
    $stmt->execute();
    $stmt->store_result();
    if ($stmt->num_rows == 0) {
        $stmt->close();
        $stmtInsert = $conn->prepare("INSERT INTO $tablaOtros (CURP) VALUES (?)");
        $stmtInsert->bind_param("s", $curp);
        $stmtInsert->execute();
        $stmtInsert->close();
    } else {
        $stmt->close();
    }
} else {
    error_log("❌ No se encontró la tabla plantilla_otros ni Plantilla_otros.");
}

// --- Listo ---
echo json_encode(['success' => true]);
$conn->close();
?>
