# config/packages/security.yaml
security:
    # https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers
    providers:
        # Appelle votre provider d'utilisateurs.
        # Ici, nous configurons un provider d'entité pour notre classe Account,
        # en spécifiant 'username' comme propriété d'identification.
        app_account_provider:
            entity:
                class: App\Entity\Account
                property: email # Utilise le champ 'username' de votre entité Account pour l'authentification

    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false

        main:
            lazy: true
            provider: app_account_provider # Utilise le provider que nous avons défini ci-dessus
            user_checker: App\Security\UserChecker
            form_login:
                login_path: app_login          # La route vers votre formulaire de connexion (GET)
                check_path: app_login          # L'URL où le formulaire POST sera soumis
                enable_csrf: true              # Active la protection CSRF
                csrf_token_id: authenticate    # ID du jeton CSRF (doit correspondre à celui dans votre Twig)
            entry_point: App\Security\AuthenticationEntryPoint
            custom_authenticator:
                - App\Security\LoginFormAuthenticator
                - App\Security\KeycloakAuthenticator
                - App\Security\DiscordAuthenticator
            logout:
                target: app_logout

    # Configuration des algorithmes de hachage des mots de passe.
    # Symfony choisira automatiquement le meilleur algorithme par défaut si non spécifié,
    # mais vous pouvez le configurer explicitement.
    password_hashers:
        App\Entity\Account: 'auto' # 'auto' sélectionne le meilleur algorithme disponible (recommandé)
        # Ou pour spécifier bcrypt explicitement :
        # App\Entity\Account:
        #    algorithm: bcrypt

    role_hierarchy:
        ROLE_ROOT: [ROLE_ADMIN] # ROLE_ROOT inclut ROLE_ADMIN, qui à son tour inclut ROLE_ARTEMIS


    access_control:
        - { path: ^/admin, roles: [ROLE_ADMIN] }
        - { path: ^/, roles: PUBLIC_ACCESS  } # Toutes les autres pages nécessitent une authentification complète
