<?php

declare(strict_types=1);

namespace App\Integrations\StatusCake;

use GuzzleHttp\Client as GuzzleClient;
use GuzzleHttp\Exception\GuzzleException;
use Symfony\Component\Messenger\MessageBusInterface;

final class GuzzleHandler
{
    private $client;
    private $url = 'https://app.statuscake.com/API';
    /**
     * @var MessageBusInterface
     */
    private $messageBus;
    /**
     * @var string
     */
    private $key;
    /**
     * @var string
     */
    private $username;

    public function __construct(string $username, string $key, GuzzleClient $client, MessageBusInterface $messageBus)
    {
        $this->username = $username;
        $this->key = $key;
        $this->client = $client;
        $this->messageBus = $messageBus;
    }

    /**
     * @param RequestInterface $request
     *
     * @return string
     *
     * @throws GuzzleException
     */
    public function makeRequest(RequestInterface $request)
    {
        $url = sprintf('%s/%s/', $this->url, $request->queryString());
        $response = $this->client->request($request->method(), $url, ['headers' => ['API' => $this->key, 'Username' => $this->username]]);

        return json_decode((string) $response->getBody());
    }
}
