<?php
// Permisos.php

if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

/**
 * Verifica si el usuario tiene un permiso específico sobre un módulo.
 *
 * @param string $modulo Nombre del módulo (ej: 'vehiculos', 'choferes', etc.).
 * @param string $accion Acción a consultar 
 *        ('puede_agregar', 'puede_editar', 'puede_eliminar', 
 *         'puede_reportes', 'puede_movimientos', 'puede_estado').
 * @return bool true si tiene permiso, false en caso contrario.
 */
function tienePermiso($modulo, $accion) {
    if (!isset($_SESSION["rol"])) {
        return false;
    }

    // Acciones válidas
    $acciones_validas = [
        "puede_agregar",
        "puede_editar",
        "puede_eliminar",
        "puede_reportes",
        "puede_movimientos",
        "puede_estado"
    ];

    if (!in_array($accion, $acciones_validas, true)) {
        return false;
    }

    // Si es administrador, tiene todos los permisos
    if ($_SESSION["rol"] === "administrador") {
        return true;
    }

    // Si ya están en sesión, devolver directamente
    if (isset($_SESSION["permisos"][$modulo][$accion])) {
        return $_SESSION["permisos"][$modulo][$accion] == 1;
    }

    // Obtener permisos desde la base de datos
    require_once 'Conexion_BD.php';
    $conn   = new Conexion_BD();
    $mysqli = $conn->getConnection();

    $id_usuario = $_SESSION["id_usuario"];

    $query = "
        SELECT puede_agregar,
               puede_editar,
               puede_eliminar,
               puede_reportes,
               puede_movimientos,
               puede_estado
        FROM permisos_usuario
        WHERE id_usuario = ? AND modulo = ?
    ";

    $stmt = $mysqli->prepare($query);
    if (!$stmt) {
        $conn->closeConnection();
        return false;
    }

    $stmt->bind_param("is", $id_usuario, $modulo);
    $stmt->execute();
    $result = $stmt->get_result();

    $permiso = false;
    if ($row = $result->fetch_assoc()) {
        // Cargar todos los permisos del módulo a la sesión
        $_SESSION["permisos"][$modulo] = [
            "puede_agregar"     => (int)$row["puede_agregar"],
            "puede_editar"      => (int)$row["puede_editar"],
            "puede_eliminar"    => (int)$row["puede_eliminar"],
            "puede_reportes"    => (int)$row["puede_reportes"],
            "puede_movimientos" => (int)$row["puede_movimientos"],
            "puede_estado"      => (int)$row["puede_estado"]
        ];
        $permiso = ((int)$row[$accion]) === 1;
    }

    $stmt->close();
    $conn->closeConnection();

    return $permiso;
}
?>
