<?php
namespace Incoviba\Service\Money;

use DateTimeInterface;
use Psr\Http\Client\ClientInterface;
use GuzzleHttp\Exception\GuzzleException;
use Incoviba\Common\Define\Money\Provider;
use Incoviba\Common\Implement\Exception\EmptyResponse;

class MiIndicador implements Provider
{
    const UF = 'uf';
    const IPC = 'ipc';
    const USD = 'dolar';

    public function __construct(protected ClientInterface $client) {}

    /**
     * @throws EmptyResponse
     */
    public function get(string $money_symbol, DateTimeInterface $dateTime): float
    {
        $request_uri = "{$money_symbol}/{$dateTime->format('d-m-Y')}";
        try {
            $response = $this->client->get($request_uri);
        } catch (GuzzleException) {
            throw new EmptyResponse($request_uri);
        }

        if ((int) floor($response->getStatusCode() / 100) !== 2) {
            throw new EmptyResponse($request_uri);
        }

        $body = $response->getBody();
        $json = json_decode($body->getContents());

        if (empty($json) or $json->codigo !== $money_symbol or count($json->serie) === 0) {
            throw new EmptyResponse($request_uri);
        }
        return $json->serie[0]->valor;
    }
    public static function getSymbol(string $identifier): string
    {
        $upper = strtoupper($identifier);
        $output = '';
        eval("\$output = self::{$upper};");
        return $output;
    }
}
