<?php

namespace App\EventSubscriber;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
use Symfony\Component\Security\Core\Exception\InsufficientAuthenticationException;

class AccessDeniedSubscriber implements EventSubscriberInterface
{
    public static function getSubscribedEvents(): array
    {
        return [
            KernelEvents::EXCEPTION => ['onKernelException', 10],
        ];
    }

    public function onKernelException(ExceptionEvent $event): void
    {
        $exception = $event->getThrowable();

        // Intercepter les exceptions d'authentification insuffisante (utilisateur non connecté)
        if ($exception instanceof InsufficientAuthenticationException) {
            // Rediriger vers la page d'accueil au lieu de /login
            $event->setResponse(new RedirectResponse('/'));
            return;
        }

        // Intercepter les exceptions d'accès refusé (utilisateur connecté mais sans rôle)
        if ($exception instanceof AccessDeniedException) {
            // Rediriger vers la page d'accueil
            $event->setResponse(new RedirectResponse('/'));
        }
    }
}

