<?php

declare(strict_types=1);

namespace Fennec\Security;

/**
 * Hiérarchie des rôles applicatifs à 4 niveaux : chaque rôle hérite des permissions du précédent.
 */
enum Role: string
{
    case VISITEUR = 'ROLE_VISITEUR';
    case USER = 'ROLE_USER';
    case ADMIN = 'ROLE_ADMIN';
    case SUPERADMIN = 'ROLE_SUPERADMIN';

    /**
     * Indique si ce rôle couvre au moins le niveau du rôle minimum requis.
     */
    public function satisfies(self $minimumRequired): bool
    {
        return $this->level() >= $minimumRequired->level();
    }

    private function level(): int
    {
        return match ($this) {
            self::VISITEUR => 0,
            self::USER => 1,
            self::ADMIN => 2,
            self::SUPERADMIN => 3,
        };
    }
}
