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

$curp = $_GET['curp'] ?? '';
$curp = trim($curp);

if (empty($curp)) {
    echo json_encode(['success' => false, 'message' => 'CURP no especificado']);
    exit;
}

// Consulta principal de Plantilla
$sql = "SELECT * FROM Plantilla WHERE CURP = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("s", $curp);
$stmt->execute();
$res = $stmt->get_result();

if ($res->num_rows === 0) {
    echo json_encode(['success' => false, 'message' => 'Empleado no encontrado']);
    exit;
}

$empleado = $res->fetch_assoc();

// Cargar contraseña global logon desde tabla Users
$userData = [];
if (!empty($empleado['ATTUID'])) {
    $sqlU = "SELECT Contrasena FROM users WHERE attuid = ?";
    $stmtU = $conn->prepare($sqlU);
    $stmtU->bind_param("s", $empleado['ATTUID']);
    $stmtU->execute();
    $resU = $stmtU->get_result();
    $userData = $resU->fetch_assoc() ?? [];
}

// Cargar datos personales
$sqlP = "SELECT * FROM Plantilla_datos_personales WHERE CURP = ?";
$stmtP = $conn->prepare($sqlP);
$stmtP->bind_param("s", $curp);
$stmtP->execute();
$resP = $stmtP->get_result();
$datos_personales = $resP->fetch_assoc() ?: new stdClass();

// Cargar datos financieros
$sqlF = "SELECT * FROM Plantilla_datos_financieros WHERE CURP = ?";
$stmtF = $conn->prepare($sqlF);
$stmtF->bind_param("s", $curp);
$stmtF->execute();
$resF = $stmtF->get_result();
$datos_financieros = $resF->fetch_assoc() ?: new stdClass();

// Obtener motivo de baja desde PlantillaSolicitMovim
$motivoMov = [];
$sqlM = "SELECT motivoDeBaja FROM PlantillaSolicitMovim WHERE CURP = ? ORDER BY id DESC LIMIT 1";
$stmtM = $conn->prepare($sqlM);
$stmtM->bind_param("s", $curp);
$stmtM->execute();
$resM = $stmtM->get_result();
$motivoMov = $resM->fetch_assoc() ?? [];

// Cargar otros datos
$sqlO = "SELECT * FROM Plantilla_otros WHERE CURP = ?";
$stmtO = $conn->prepare($sqlO);
$stmtO->bind_param("s", $curp);
$stmtO->execute();
$resO = $stmtO->get_result();
$otros = $resO->fetch_assoc() ?: new stdClass();

// Cargar vacaciones por periodo
$vacaciones = [];
$vacaciones_url = (isset($_SERVER['REQUEST_SCHEME']) ? $_SERVER['REQUEST_SCHEME'] : 'http') . '://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['SCRIPT_NAME']) . '/get_vacaciones_empleado.php?curp=' . urlencode($curp);
$vacaciones_response = @file_get_contents($vacaciones_url);
if ($vacaciones_response) {
    $vacaciones_data = json_decode($vacaciones_response, true);
    if (isset($vacaciones_data['success']) && $vacaciones_data['success'] && isset($vacaciones_data['vacaciones'])) {
        $vacaciones = $vacaciones_data['vacaciones'];
    }
}

// Agrupar vacaciones por periodo y tomar el menor diasPendientes de cada periodo
$vacaciones_agrupadas = [];
foreach ($vacaciones as $v) {
    $periodo = $v['periodo'];
    $dias = $v['diasPendientes'];
    if (!isset($vacaciones_agrupadas[$periodo]) || $dias < $vacaciones_agrupadas[$periodo]['diasPendientes']) {
        $vacaciones_agrupadas[$periodo] = $v;
    }
}
// Reindexar el arreglo
$vacaciones_agrupadas = array_values($vacaciones_agrupadas);
// Calcular el total de días pendientes sumando solo los mínimos por periodo
$totalPendientes = array_sum(array_column($vacaciones_agrupadas, 'diasPendientes'));

echo json_encode([
    'success' => true,
    'empleado' => $empleado,
    'personales' => $datos_personales,
    'financieros' => $datos_financieros,
    'otros' => $otros,
    'user' => $userData,
    'movimiento' => $motivoMov,
    'vacaciones' => $vacaciones_agrupadas,
    'totalPendientes' => $totalPendientes
], JSON_UNESCAPED_UNICODE);
