<?php

namespace App\Service;

use App\Message\LandingPageBacklinksMessage;
use App\Message\LandingPagePAMessage;
use Symfony\Component\Messenger\MessageBusInterface;

class LandingPageProcessor
{
    private $checkers;
    private $url;
    private $landingPageId;
    private $messageBus;

    public function __construct(MessageBusInterface $messageBus)
    {
        $this->messageBus = $messageBus;
    }

    public function addChecker(StatCheckerInterface $checker)
    {
        $this->checkers[] = $checker;
    }

    public function process()
    {
        if (is_array($this->getCheckers())) {
            array_map(function (StatCheckerInterface $checker) {
                $response = $checker->check($this->getUrl());
                $this->dispatchMessage($response);
            }, $this->getCheckers());
        }
    }

    public function getCheckers()
    {
        return $this->checkers;
    }

    /**
     * @return mixed
     */
    public function getUrl()
    {
        return $this->url;
    }

    /**
     * @param mixed $url
     */
    public function setUrl($url): void
    {
        $this->url = $url;
    }

    private function dispatchMessage($response)
    {
        if (is_string($response)) {
            $this->messageBus->dispatch(new LandingPageBacklinksMessage($this->landingPageId, $response));
        } elseif (StatResponse::class === get_class($response)) {
            $this->messageBus->dispatch(new LandingPagePAMessage($this->landingPageId, $response->getValue()));
        }
    }

    /**
     * @param int $landingPageId
     */
    public function setLandingPageId(int $landingPageId): void
    {
        $this->landingPageId = $landingPageId;
    }
}
