<?php

declare(strict_types=1);

namespace App\Support;

use App\Repositories\UserRepository;

final class Auth
{
    public static function user(): ?array
    {
        $userId = $_SESSION['user_id'] ?? null;
        if (!$userId) {
            return null;
        }

        return (new UserRepository())->findById((int) $userId);
    }

    public static function requireUser(): array
    {
        $user = self::user();
        if ($user === null) {
            Response::json(['message' => 'Unauthenticated'], 401);
        }

        return $user;
    }

    public static function requireRole(array|string $roles): array
    {
        $user = self::requireUser();
        $roles = (array) $roles;

        if (!in_array($user['role'], $roles, true)) {
            Response::json(['message' => 'Forbidden'], 403);
        }

        return $user;
    }
}
