<?php

declare(strict_types=1);

namespace App\Administration\Infrastructure\Security;

use Symfony\Component\EventDispatcher\Attribute\AsEventListener;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;

/**
 * Ajoute le cookie refresh_token à la réponse HTTP.
 *
 * Ce listener est nécessaire car dans API Platform 4.x, la réponse n'est pas
 * disponible dans le context du processor. Le processor stocke le cookie dans
 * les attributs de la requête, et ce listener l'ajoute à la réponse.
 *
 * @see Story 1.4 - T6: Endpoint Refresh Token
 */
#[AsEventListener(event: KernelEvents::RESPONSE, priority: 0)]
final readonly class RefreshTokenCookieListener
{
    public function __invoke(ResponseEvent $event): void
    {
        $request = $event->getRequest();
        $cookie = $request->attributes->get('_refresh_token_cookie');

        if ($cookie instanceof Cookie) {
            $event->getResponse()->headers->setCookie($cookie);
            $request->attributes->remove('_refresh_token_cookie');
        }
    }
}
