<?php

namespace App\Command;

use App\Integrations\StatusCake\GetTestsRequest;
use App\Integrations\StatusCake\GuzzleHandler;
use App\Message\UptimeMessage;
use App\Service\Campaign\PageSpeedCheckService;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;
use Symfony\Component\Messenger\MessageBusInterface;

class CrmCheckUptimeCommand extends Command
{
    protected static $defaultName = 'crm:check:uptime';
    /**
     * @var GuzzleHandler
     */
    private $handler;
    /**
     * @var PageSpeedCheckService
     */
    private $pageSpeedCheckService;
    /**
     * @var MessageBusInterface
     */
    private $messageBus;

    public function __construct(GuzzleHandler $handler, MessageBusInterface $messageBus,
                                string $name = null)
    {
        parent::__construct($name);
        $this->handler = $handler;
        $this->messageBus = $messageBus;
    }

    protected function configure()
    {
        $this
            ->setDescription('Check Uptime');
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $io = new SymfonyStyle($input, $output);

        $response = $this->handler->makeRequest((new GetTestsRequest()));

        foreach ($response as $check) {
            $this->messageBus->dispatch(new UptimeMessage($check->TestID, $check->Uptime));
        }

        $io->success('Job finished');

        return 0;
    }
}
