<?php

declare(strict_types=1);

namespace Fennec\Security;

/**
 * Règle d'accès associée à un pattern d'URL : publique, ou protégée avec un rôle minimum.
 */
final class FirewallRule
{
    public function __construct(
        public readonly string $pathPattern,
        public readonly bool $isPublic,
        public readonly ?Role $requiredRole = null,
    ) {
    }

    /**
     * Rôle minimum effectif : VISITEUR si la règle est publique, sinon le rôle
     * explicitement configuré ou ROLE_USER par défaut (protégé = authentifié au minimum).
     */
    public function effectiveMinimumRole(): Role
    {
        if ($this->isPublic) {
            return Role::VISITEUR;
        }

        return $this->requiredRole ?? Role::USER;
    }
}
