<?php
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, Authorization');
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { http_response_code(200); exit; }

require_once __DIR__ . '/../../config.php';

$headers    = getallheaders();
$authHeader = $headers['Authorization'] ?? $headers['authorization'] ?? '';
$token      = str_replace('Bearer ', '', $authHeader);

if (empty($token)) {
    $body  = json_decode(file_get_contents('php://input'), true);
    $token = $body['token'] ?? '';
}

if (empty($token)) {
    http_response_code(401);
    echo json_encode(['success' => false, 'message' => 'Token requerido']);
    exit;
}

$db  = getDB();
$now = date('Y-m-d H:i:s');

// ── Buscar sesión ───────────────────────────────────────────────────────────
$stmt = $db->prepare(
    "SELECT idusuarios_sist, role, cd_id FROM admin_sessions
     WHERE token = ? AND expira > ? LIMIT 1"
);
$stmt->execute([$token, $now]);
$sess = $stmt->fetch(PDO::FETCH_ASSOC);

if (!$sess) {
    http_response_code(401);
    echo json_encode(['success' => false, 'message' => 'Sesión expirada o inválida']);
    exit;
}

$role = $sess['role'] ?? 'admin';
$cdId = $sess['cd_id'] ? (int)$sess['cd_id'] : null;

// ── Obtener datos del usuario según role ────────────────────────────────────
if ($role === 'centro') {
    $stmtU = $db->prepare(
        "SELECT idusuarios_ci, nombre, nombre_usr, rango_idrango
         FROM usuarios_ci WHERE idusuarios_ci = ? LIMIT 1"
    );
    $stmtU->execute([$cdId]);
    $user = $stmtU->fetch(PDO::FETCH_ASSOC);

    // Obtener módulos asignados
    $stmtMod = $db->prepare("SELECT modulo_key FROM cd_modulos WHERE cd_id = ?");
    $stmtMod->execute([$cdId]);
    $modulos = $stmtMod->fetchAll(PDO::FETCH_COLUMN);

    echo json_encode([
        'success' => true,
        'data' => [
            'idusuarios_sist' => $sess['idusuarios_sist'],
            'usuario'         => $user['nombre_usr'] ?? '',
            'rango'           => $user['rango_idrango'] ?? 0,
            'role'            => 'centro',
            'cd_id'           => $cdId,
            'cd_nombre'       => $user['nombre'] ?? '',
            'modulos'         => $modulos,
        ]
    ]);
} else {
    $stmtU = $db->prepare(
        "SELECT nombre_usr, rango_idrango FROM usuarios_sist
         WHERE idusuarios_sist = ? LIMIT 1"
    );
    $stmtU->execute([$sess['idusuarios_sist']]);
    $user = $stmtU->fetch(PDO::FETCH_ASSOC);

    echo json_encode([
        'success' => true,
        'data' => [
            'idusuarios_sist' => $sess['idusuarios_sist'],
            'usuario'         => $user['nombre_usr'] ?? '',
            'rango'           => $user['rango_idrango'] ?? 0,
            'role'            => 'admin',
            'cd_id'           => null,
            'cd_nombre'       => null,
            'modulos'         => [],
        ]
    ]);
}
