<?php

namespace App\MessageHandler;

use App\Entity\MailgunEvent;
use App\Message\MailgunEventMessage;
use App\Service\MailgunEventService;
use App\Service\NegotiationMessageService;
use Doctrine\ORM\EntityNotFoundException;
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;

class MailgunEventMessageHandler implements MessageHandlerInterface
{
    /**
     * @var MailgunEventService
     */
    private $mailgunEventService;
    /**
     * @var NegotiationMessageService
     */
    private $negotiationMessageService;

    public function __construct(NegotiationMessageService $negotiationMessageService, MailgunEventService $mailgunEventService)
    {
        $this->mailgunEventService = $mailgunEventService;
        $this->negotiationMessageService = $negotiationMessageService;
    }

    public function __invoke(MailgunEventMessage $message)
    {
        try {
            $negotiationMessage = $this->negotiationMessageService->get($message->getMessageId());
        } catch (EntityNotFoundException $e) {
            return;
        }

        $event = (new MailgunEvent())
            ->setTitle($message->getEvent())
            ->setTimestamp($message->getTimestamp())
            ->setNegotiationMessage($negotiationMessage);

        $this->mailgunEventService->save($event);
    }
}
