<?php
// ============================================================
//  auth.php — Autenticação e sessão (VERSÃO CORRIGIDA)
// ============================================================

// Verificar se config.php existe antes de incluir
$configPath = __DIR__ . '/config.php';
if (!file_exists($configPath)) {
    die('❌ config.php não encontrado. Crie o arquivo config.php na raiz do projeto.');
}
require_once $configPath;

// Iniciar sessão com verificação
if (session_status() === PHP_SESSION_NONE) {
    // Configurar antes de iniciar
    ini_set('session.cookie_httponly', 1);
    ini_set('session.cookie_secure', 0);
    ini_set('session.cookie_samesite', 'Lax');
    session_start();
}

// Redireciona para login se não autenticado
function requireLogin(): void {
    if (empty($_SESSION['usuario_id'])) {
        header('Location: login.php');
        exit;
    }
}

// Verifica se usuário tem perfil específico
function requirePerfil(array $perfis): void {
    requireLogin();
    if (!in_array($_SESSION['perfil'] ?? '', $perfis)) {
        http_response_code(403);
        die('<h2>Acesso negado.</h2><p>Você não tem permissão para acessar esta página.</p><p><a href="dashboard.php">Voltar</a></p>');
    }
}

// Dados do usuário logado
function usuarioLogado(): array {
    return [
        'id'     => $_SESSION['usuario_id'] ?? 0,
        'nome'   => $_SESSION['usuario_nome'] ?? '',
        'login'  => $_SESSION['usuario_login'] ?? '',
        'perfil' => $_SESSION['perfil'] ?? '',
    ];
}

// Verifica se está logado
function isLoggedIn(): bool {
    return !empty($_SESSION['usuario_id']);
}

// Tenta fazer login
function tentarLogin(string $login, string $senha): bool {
    $stmt = pdo()->prepare("SELECT id, nome, login, senha_hash, perfil FROM usuarios WHERE login = ? AND ativo = 1");
    $stmt->execute([$login]);
    $user = $stmt->fetch();

    if ($user && password_verify($senha, $user['senha_hash'])) {
        session_regenerate_id(true);
        $_SESSION['usuario_id']    = $user['id'];
        $_SESSION['usuario_nome']  = $user['nome'];
        $_SESSION['usuario_login'] = $user['login'];
        $_SESSION['perfil']        = $user['perfil'];
        return true;
    }
    return false;
}

function logout(): void {
    $_SESSION = [];
    if (ini_get("session.use_cookies")) {
        $params = session_get_cookie_params();
        setcookie(session_name(), '', time() - 42000,
            $params["path"], $params["domain"],
            $params["secure"], $params["httponly"]
        );
    }
    session_destroy();
    header('Location: login.php');
    exit;
}

// CSRF helpers
function csrfToken(): string {
    if (empty($_SESSION['csrf_token'])) {
        $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
    }
    return $_SESSION['csrf_token'];
}

function csrfField(): string {
    return '<input type="hidden" name="csrf_token" value="' . csrfToken() . '">';
}

function verifyCsrf(string $token): bool {
    return hash_equals($_SESSION['csrf_token'] ?? '', $token);
}