<?php

namespace App\EventLog\Action\Handler;

use App\EventLog\Framework\Repository\EventLogRepository;
use App\EventLog\Action\Command\AddEventLogCommand;
use App\EventLog\Action\Result\AddEventLogResult;
use OneToMany\RichBundle\Contract\CommandInterface;
use OneToMany\RichBundle\Contract\HandlerInterface;
use OneToMany\RichBundle\Contract\ResultInterface;

/*** @implements HandlerInterface<AddEventLogCommand> */
class AddEventLogHandler implements HandlerInterface
{
    public function __construct(
        private EventLogRepository $repository,
    ) {}

    public function handle(CommandInterface $command): ResultInterface
    {
        $eventLog = $this->repository->insert(
            user: $command->user,
            type: $command->type,
            message: $command->message,
            context: $command->context
        );
        return new AddEventLogResult($eventLog);
    }
}
