<?php
require_once __DIR__ . '/database.php';

function current_user_id() {
    // Restaurado a tu estructura original
    return isset($_SESSION['user']['id']) ? (int) $_SESSION['user']['id'] : 0;
}

function current_user_role() {
    // Restaurado a tu estructura original
    return isset($_SESSION['user']['role']) ? $_SESSION['user']['role'] : null;
}

function role_label($role) {
    $roles = array(
        'admin' => 'Admin',
        'administracion' => 'Administración',
        'comercial' => 'Comercial',
        'operaciones' => 'Operaciones'
    );
    return isset($roles[$role]) ? $roles[$role] : $role;
}

// Nueva función que lee los permisos del usuario desde la base de datos (o sesión)
function user_can($permissionKey) {
    $role = current_user_role();
    $userId = current_user_id();

    if (!$role || !$userId) return false;
    
    // El Admin maestro siempre puede ver todo
    if ($role === 'admin') return true;

    // Una consulta por request aplica revocaciones y nuevos permisos sin
    // obligar al usuario a cerrar sesión. La caché estática evita repetirla
    // en cada enlace del sidebar.
    static $requestPermissions = null;
    static $requestPermissionsUserId = null;
    if ($requestPermissions === null || $requestPermissionsUserId !== $userId) {
        $pdo = db();
        $stmt = $pdo->prepare("SELECT module_permissions FROM users WHERE id = ?");
        $stmt->execute([$userId]);
        $row = $stmt->fetch(PDO::FETCH_ASSOC);
        
        $perms = [];
        if ($row && $row['module_permissions']) {
            $perms = json_decode($row['module_permissions'], true) ?: [];
        }
        $requestPermissions = $perms;
        $requestPermissionsUserId = $userId;
        $_SESSION['user']['permissions'] = $perms;
    }

    return in_array($permissionKey, $requestPermissions, true);
}

function require_permission($permissionKey) {
    if (!user_can($permissionKey)) {
        http_response_code(403);
        die('No tienes permisos para acceder a esta sección.');
    }
}
