# Error tracking → GlitchTip (compatible SDK Sentry).
# Actif uniquement en prod (bundle enregistre seulement pour prod dans bundles.php).
# Si SENTRY_DSN est vide/non defini, le SDK est inerte (rien n'est envoye).
when@prod:
    parameters:
        # Valeur par defaut : DSN vide => Sentry desactive tant qu'il n'est pas fourni.
        env(SENTRY_DSN): ''

    sentry:
        dsn: '%env(SENTRY_DSN)%'
        # Capture des erreurs fatales PHP via le handler. On DESACTIVE le listener
        # kernel pour eviter les doublons avec le handler Monolog (ci-dessous) : les
        # exceptions du kernel sont deja logguees par Symfony => remontees via Monolog.
        register_error_listener: false
        register_error_handler: true
        options:
            environment: '%env(APP_ENV)%'
            release: '%app.version%'
            # Pas d'APM/tracing (DuckDB hors perimetre du ticket #146).
            traces_sample_rate: 0.0
            # Ne pas remonter les 4xx HTTP comme des erreurs (bruit).
            ignore_exceptions:
                - Symfony\Component\HttpKernel\Exception\NotFoundHttpException
                - Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException
                - Symfony\Component\Security\Core\Exception\AccessDeniedException

    # Handler Monolog -> Sentry : remonte les logs niveau ERROR+ comme Issues GlitchTip
    # (en plus des erreurs fatales). Les $logger->error(...) metier deviennent des Issues.
    # Le filtre ignore_exceptions ci-dessus s'applique aussi a ces evenements.
    services:
        Sentry\Monolog\Handler:
            arguments:
                $hub: '@Sentry\State\HubInterface'
                $level: !php/const Monolog\Level::Error
                $bubble: true
