<?php
/**
 * Control de sesión y roles.
 * Uso:  require_once 'includes/auth.php';  exigir_rol('propietario');
 */
require_once __DIR__ . '/../config.php';

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

function exigir_rol(...$roles) {
    if (!isset($_SESSION['id_usuario'], $_SESSION['rol'])) {
        header('Location: login.php?mensaje=no_autorizado');
        exit;
    }

    // Cierre por inactividad
    if (isset($_SESSION['ultimo_acceso']) && (time() - $_SESSION['ultimo_acceso']) > TIEMPO_INACTIVIDAD) {
        session_unset();
        session_destroy();
        header('Location: login.php?mensaje=inactividad');
        exit;
    }
    $_SESSION['ultimo_acceso'] = time();

    if (!in_array($_SESSION['rol'], $roles, true)) {
        header('Location: login.php?mensaje=no_autorizado');
        exit;
    }
}

/* ---------- CSRF ---------- */
function csrf_token() {
    if (empty($_SESSION['csrf'])) {
        $_SESSION['csrf'] = bin2hex(random_bytes(24));
    }
    return $_SESSION['csrf'];
}

function csrf_field() {
    return '<input type="hidden" name="csrf" value="' . csrf_token() . '">';
}

function csrf_check() {
    if (($_POST['csrf'] ?? '') !== ($_SESSION['csrf'] ?? null) || empty($_SESSION['csrf'])) {
        http_response_code(403);
        die('Solicitud inválida (token CSRF). Vuelve atrás e inténtalo de nuevo.');
    }
}
