security:
    password_hashers:
        Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface: 'auto'

    providers:
        app_user_provider:
            entity:
                class: App\Entity\User
                property: email

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

        # API publique RGPD — pas d'auth requise
        api_rgpd:
            pattern: ^/api/rgpd
            security: false

        # =============================================
        # [RGPD-FIX] Endpoint bannière cookies — stateless, sans session ni CSRF
        # POST /api/consent reçoit les choix du visiteur depuis cookie-consent.js
        # Doit être AVANT le firewall main pour ne pas hériter de la session Symfony.
        # Référence audit : CRITIQUE — ConsentRecord non alimenté par le JS cookies
        # =============================================
        api_consent:
            pattern: ^/api/consent$
            stateless: true
            security: false

        # =============================================
        # FIREWALL ADMIN — MFA TOTP activé en prod (config/packages/prod/security.yaml)
        # Politique MDP V1.0 §5 — MFA obligatoire back-office
        # context: admin_session — isolé du firewall main pour éviter la
        # contamination de session entre comptes admin et comptes clients.
        # =============================================
        admin:
            pattern: ^/admin
            lazy: true
            provider: app_user_provider
            context: main_session
            user_checker: App\Security\UserChecker
            form_login:
                login_path: app_login
                check_path: app_login
                default_target_path: /admin
                enable_csrf: true
            logout:
                path: app_logout
                target: app_home

        main:
            lazy: true
            provider: app_user_provider
            context: main_session
            user_checker: App\Security\UserChecker
            form_login:
                login_path: app_login
                check_path: app_login
                default_target_path: app_account_dashboard
                enable_csrf: true
            logout:
                path: app_logout
                target: app_home
            remember_me:
                secret: '%kernel.secret%'
                lifetime: 604800 # 1 semaine
                path: /
                always_remember_me: false

    # Contrôle d'accès par URL
    access_control:
        # Route MFA — accessible pendant la vérification 2FA uniquement
        - { path: ^/2fa, role: IS_AUTHENTICATED_2FA_IN_PROGRESS }

        # Pages admin - uniquement ROLE_ADMIN + 2FA validé
        - { path: ^/admin, roles: ROLE_ADMIN }

        # Espace compte client - ROLE_USER minimum
        - { path: ^/compte, roles: ROLE_USER }

        # COMMANDE/PAIEMENT - nécessite authentification
        - { path: ^/cart/checkout, roles: ROLE_USER }
        - { path: ^/cart/success, roles: ROLE_USER }

    # Hiérarchie des rôles
    role_hierarchy:
        ROLE_ADMIN: ROLE_USER

when@test:
    security:
        password_hashers:
            Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface:
                algorithm: auto
                cost: 4
