<?php
header('Content-Type: application/json');
require_once(__DIR__ . '/../db/conexion.php');

// Validar CURP recibido por GET o POST
$curp = $_GET['curp'] ?? $_POST['curp'] ?? '';
$curp = trim($curp);

if (empty($curp) || strlen($curp) !== 18) {
    echo json_encode(['success' => false, 'message' => 'CURP inválido']);
    exit;
}

// 1. Buscar al aspirante por CURP
$stmt = $conn->prepare("
    SELECT nombre, apellido_paterno, apellido_materno, curp, vacante_codigo, vacante_puesto, vacante_pdv, rfc
    FROM aspirantes
    WHERE curp = ?
    LIMIT 1
");
$stmt->bind_param("s", $curp);
$stmt->execute();
$res = $stmt->get_result();

if ($res->num_rows === 0) {
    echo json_encode(['success' => false, 'message' => 'No se encontró ningún aspirante con ese CURP']);
    exit;
}

$data = $res->fetch_assoc();

// Log de depuración para ver el contenido completo del arreglo $data
error_log('VALOR $data: ' . print_r($data, true));

// === Validación de vacante obligatoria ===
if (
    empty($data['vacante_codigo']) ||
    empty($data['vacante_puesto']) ||
    empty($data['vacante_pdv'])
) {
    echo json_encode([
        'success' => false,
        'message' => 'El aspirante no tiene vacante asignada correctamente. No es posible continuar con el registro. Por favor, realiza la asignación de vacante; si no la encuentras, comunícate con el área de RH.'
    ]);
    exit;
}

$vacantePdv = strtoupper($data['vacante_pdv']);
$vacantePuesto = strtoupper($data['vacante_puesto']);
$vacanteCodigo = strtoupper($data['vacante_codigo']);
$clavePdv = '';
$claveValida = false;

// 2. Buscar clave PDV en tabla Tiendas
$stmtClave = $conn->prepare("SELECT `Clave PDV`, `ORGAnizacionSOC` FROM Tiendas WHERE `PDV` = ? LIMIT 1");
$stmtClave->bind_param("s", $vacantePdv);
$stmtClave->execute();
$resClave = $stmtClave->get_result();

$orgPdv = '';
if ($rowClave = $resClave->fetch_assoc()) {
    $clavePdv = strtoupper($rowClave['Clave PDV']);
    $orgPdv = $rowClave['ORGAnizacionSOC'];
    $claveValida = str_starts_with($clavePdv, 'GRPDST');
}

// 3. Buscar tipoPosic in tabla Posiciones
$modalidad = 'TIEMPO COMPLETO';
if (!empty($vacanteCodigo)) {
    $stmtMod = $conn->prepare("
        SELECT tipoPosic 
        FROM Posiciones 
        WHERE codigo = ?
        LIMIT 1
    ");
    if (!$stmtMod) {
        error_log('Error en prepare de modalidad: ' . $conn->error);
        echo json_encode(['success' => false, 'message' => 'Error interno al consultar modalidad']);
        exit;
    }
    $stmtMod->bind_param("s", $vacanteCodigo);
    if (!$stmtMod->execute()) {
        error_log('Error en execute de modalidad: ' . $stmtMod->error);
        echo json_encode(['success' => false, 'message' => 'Error interno al consultar modalidad']);
        exit;
    }
    $resMod = $stmtMod->get_result();

    if ($rowMod = $resMod->fetch_assoc()) {
        $tipoPosic = strtoupper(trim($rowMod['tipoPosic']));
        error_log('VALOR tipoPosic: ' . $tipoPosic);
        if ($tipoPosic === 'COMPUESTO') {
            $modalidad = 'MEDIO TIEMPO';
        } elseif ($tipoPosic === 'UNICO' || $tipoPosic === 'ÚNICO') {
            $modalidad = 'TIEMPO COMPLETO';
        }
    } else {
        error_log('No se encontró tipoPosic para codigo: ' . $vacanteCodigo);
    }
}

// 4. Determinar valores finales según validación
if ($claveValida) {
    $nombreCompletoPdv = $vacantePdv;
    $almacen = $vacantePdv;
    $claveUnica = $clavePdv;
} else {
    $nombreCompletoPdv = 'GRP TDA ADMINISTRACION MER';
    $almacen = 'GRP TDA ADMINISTRACION MER';
    $claveUnica = 'GRPDSTYUC025';
}

// 5. Extraer clave de estado del CURP (posición 12 y 13 → índice 11 y 12)
$claveEstado = strtoupper(substr($curp, 11, 2));

// 6. Buscar estado y ciudad en catalogo_estados_curp
$estado = 'NO DEFINIDO';
$ciudad = 'NO DEFINIDO';

$stmtEstado = $conn->prepare("SELECT estado, capital FROM catalogo_estados_curp WHERE clave = ?");
$stmtEstado->bind_param("s", $claveEstado);
$stmtEstado->execute();
$resEstado = $stmtEstado->get_result();

if ($rowEstado = $resEstado->fetch_assoc()) {
    $estado = $rowEstado['estado'];
    $ciudad = $rowEstado['capital'];
}

// 7. Consultar fecha de ingreso desde Plantilla
$fechaEntrada = null;
$stmtFecha = $conn->prepare("SELECT `FECHA DE INGRESO` FROM Plantilla WHERE CURP = ? LIMIT 1");
$stmtFecha->bind_param("s", $curp);
$stmtFecha->execute();
$resFecha = $stmtFecha->get_result();

if ($rowFecha = $resFecha->fetch_assoc()) {
    $fechaEntrada = $rowFecha['FECHA DE INGRESO'];
}

// 8. Armar respuesta final
$response = [
    'success' => true,
    'NOMBRE' => $data['nombre'],
    'APELLIDO_PATERNO' => $data['apellido_paterno'],
    'APELLIDO_MATERNO' => $data['apellido_materno'],
    'CURP' => $data['curp'],
    'PUESTO' => $data['vacante_puesto'],
    'NOMBRE_COMPLETO_PDV' => $nombreCompletoPdv,
    'ALMACEN' => $almacen,
    'CLAVE_UNICA_PDV' => $claveUnica,
    'estadoNacimiento' => $estado,
    'ciudadNacimiento' => $ciudad,
    'MODALIDAD' => $modalidad,
    'RFC' => $data['rfc'] ?? '',
    'FECHA_INGRESO' => $fechaEntrada
];

echo json_encode($response);
