<?php

declare(strict_types=1);

function admin_user(): ?array
{
    return $_SESSION['usuario'] ?? null;
}

function require_admin(): void
{
    if (!admin_user()) {
        flash('warning', 'Entre com seu usuário para acessar a gestão.');
        redirect('/gestao/login.php');
    }
}

function attempt_admin_login(string $login, string $password): bool
{
    $stmt = db()->prepare(
        'SELECT id, nome, email, login, senha_hash, perfil, ativo
         FROM usuarios
         WHERE (login = :login OR email = :login) AND ativo = 1
         LIMIT 1'
    );
    $stmt->execute(['login' => $login]);
    $user = $stmt->fetch();

    if (!$user || !password_verify($password, $user['senha_hash'])) {
        return false;
    }

    unset($user['senha_hash']);
    session_regenerate_id(true);
    $_SESSION['usuario'] = $user;
    log_action('LOGIN', 'usuarios', (int) $user['id']);
    return true;
}

function logout_admin(): void
{
    if (admin_user()) {
        log_action('LOGOUT', 'usuarios', (int) admin_user()['id']);
    }

    $_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();
}
