<?php

namespace App\Event\Service;

use App\Entity\Account;
use App\Entity\AccountLoginRegister;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\Attribute\AsEventListener;
use Symfony\Component\Security\Http\Event\LoginSuccessEvent;

#[AsEventListener(event: LoginSuccessEvent::class, method: 'onLoginSuccess')]
class LoginStatsSubscriber
{
    public function __construct(private readonly EntityManagerInterface $entityManager)
    {
    }

    public function onLoginSuccess(LoginSuccessEvent $event): void
    {
        $user = $event->getUser();

        // On ne loggue que si c'est bien une instance de notre entité Account
        if (!$user instanceof Account) {
            return;
        }

        $request = $event->getRequest();

        $loginRegister = new AccountLoginRegister();
        $loginRegister->setAccount($user);
        $loginRegister->setLoginAt(new \DateTimeImmutable());
        $loginRegister->setIp($request->getClientIp());

        $loginRegister->setUserAgent($request->headers->get('User-Agent'));

        try {
            $this->entityManager->persist($loginRegister);
            $this->entityManager->flush();
        } catch (\Exception $e) {
            // Ignorer les erreurs de log pour ne pas bloquer le login
        }
    }
}
