<?php

declare(strict_types=1);

namespace App\MessageHandler;

use App\Entity\PasswordToken;
use App\Message\UserCreatedMessage;
use App\Service\PasswordTokenService;
use Cake\Chronos\Chronos;
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;

final class UserCreatedMessageHandler implements MessageHandlerInterface
{
    /**
     * @var PasswordTokenService
     */
    private $passwordTokenService;

    public function __construct(PasswordTokenService $passwordTokenService)
    {
        $this->passwordTokenService = $passwordTokenService;
    }

    public function __invoke(UserCreatedMessage $message)
    {
        $passwordToken = (new PasswordToken())
            ->setUser($message->getUser())
            ->setExpiresAt(Chronos::create()->addMonth(1)->toMutable())
            ->setType('NEW');

        $this->passwordTokenService->save($passwordToken);
    }
}
