<?php

namespace App\MessageHandler;

use App\Entity\Campaign\UptimeCheck;
use App\Message\UptimeMessage;
use App\Service\Campaign\UptimeCheckService;
use App\Service\CampaignService;
use Exception;
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;

final class UptimeMessageHandler implements MessageHandlerInterface
{
    /**
     * @var UptimeCheckService
     */
    private $uptimeCheckService;
    /**
     * @var CampaignService
     */
    private $campaignService;

    public function __construct(CampaignService $campaignService, UptimeCheckService $uptimeCheckService)
    {
        $this->uptimeCheckService = $uptimeCheckService;
        $this->campaignService = $campaignService;
    }

    public function __invoke(UptimeMessage $message)
    {
        try {
            $campaign = $this->campaignService->findByStatusCakeId(['statusCakeId' => $message->getStatusCakeId()]);
        } catch (Exception $e) {
            return null;
        }

        if (null === $campaign) {
            return null;
        }

        $check = (new UptimeCheck())
            ->setCampaign($campaign)
            ->setValue($message->getUptime());

        $this->uptimeCheckService->save($check);
    }
}
