<?php
if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

function verificarPermissao($permissoesNecessarias) {
    // Verificar se a sessão está ativa
    if (!isset($_SESSION['logado']) || $_SESSION['logado'] !== true) {
        header('Location: login.php');
        exit;
    }

    // Verificar se usuário está ativo
    if (isset($_SESSION['usuario_id'])) {
        require_once 'conexao.php';
        $stmt = $conn->prepare("SELECT ativo FROM usuarios WHERE id = ?");
        $stmt->bind_param("i", $_SESSION['usuario_id']);
        $stmt->execute();
        $result = $stmt->get_result();
        
        if ($result->num_rows === 1) {
            $usuario = $result->fetch_assoc();
            if (!$usuario['ativo']) {
                session_unset();
                session_destroy();
                header('Location: login.php?inativo=1');
                exit;
            }
        }
        $stmt->close();
        $conn->close();
    }

    // Se for admin, tem acesso a tudo
    if ($_SESSION['permissao'] === 'admin') {
        return true;
    }

    // Verificar se a permissão está entre as necessárias
    if (is_array($permissoesNecessarias)) {
        if (!in_array($_SESSION['permissao'], $permissoesNecessarias)) {
            header('Location: acesso_negado.php');
            exit;
        }
    } elseif ($_SESSION['permissao'] !== $permissoesNecessarias) {
        header('Location: acesso_negado.php');
        exit;
    }

    return true;
}

// Tempo de sessão (30 minutos)
$tempo_sessao = 1800;
if (isset($_SESSION['ultima_atividade'])) {
    $tempo_inatividade = time() - $_SESSION['ultima_atividade'];
    if ($tempo_inatividade > $tempo_sessao) {
        session_unset();
        session_destroy();
        header('Location: login.php?timeout=1');
        exit;
    }
}
$_SESSION['ultima_atividade'] = time();
?>