<?php


namespace Xentral\Modules\FiskalyApi\Service;


use FiskalyClient\errors\exceptions\FiskalyClientException;
use FiskalyClient\errors\exceptions\FiskalyHttpException;
use FiskalyClient\errors\exceptions\FiskalyHttpTimeoutException;
use Xentral\Modules\FiskalyApi\Data\BillingAddress;
use Xentral\Modules\FiskalyApi\Data\Organisation;
use Xentral\Modules\FiskalyApi\Data\User;

class FiskalyManagementApi extends FiskalyApi
{

    private const ENDPOINT_BASE = 'https://dashboard.fiskaly.com/api/v0/';


    public function __construct(string $smaEndpoint, string $apiKey, string $apiSecret)
    {
        parent::__construct($smaEndpoint, $apiKey, $apiSecret, self::ENDPOINT_BASE);
    }

    /**
     * @param string|null $uuId
     *
     * @throws FiskalyClientException
     * @throws FiskalyHttpException
     * @throws FiskalyHttpTimeoutException
     *
     * @return Organisation[]
     */
    public function getOrganisations(?string $uuId = null): array
    {
        if ($uuId === null) {
            $organisations = $this->callApiGet('organizations');

            return array_map([Organisation::class, 'fromApiResult'], $organisations->data);
        }

        $organisation = $this->callApiGet("organizations/{$uuId}");

        return [Organisation::fromApiResult($organisation)];
    }

    public function getUsers(string $organisationUuId): array
    {
        $result = $this->callApiGet("/organizations/{$organisationUuId}/users");

        return array_map([User::class, 'fromApiResult'], $result->data);
    }

    public function getBillingAddresses(): array
    {
        $result = $this->callApiGet('billing-addresses');

        return array_map([BillingAddress::class, 'fromApiResult'], $result->data);
    }
}