/* tslint:disable */
/* eslint-disable */
/**
 * Stacks 2.0 Blockchain API
 * This is the documentation for the Stacks 2.0 Blockchain API.  It is comprised of two parts; the Stacks Blockchain API and the Stacks Core API.  [![Run in Postman](https://run.pstmn.io/button.svg)](https://app.getpostman.com/run-collection/614feab5c108d292bffa#?env%5BStacks%20Blockchain%20API%5D=W3sia2V5Ijoic3R4X2FkZHJlc3MiLCJ2YWx1ZSI6IlNUMlRKUkhESE1ZQlE0MTdIRkIwQkRYNDMwVFFBNVBYUlg2NDk1RzFWIiwiZW5hYmxlZCI6dHJ1ZX0seyJrZXkiOiJibG9ja19pZCIsInZhbHVlIjoiMHgiLCJlbmFibGVkIjp0cnVlfSx7ImtleSI6Im9mZnNldCIsInZhbHVlIjoiMCIsImVuYWJsZWQiOnRydWV9LHsia2V5IjoibGltaXRfdHgiLCJ2YWx1ZSI6IjIwMCIsImVuYWJsZWQiOnRydWV9LHsia2V5IjoibGltaXRfYmxvY2siLCJ2YWx1ZSI6IjMwIiwiZW5hYmxlZCI6dHJ1ZX0seyJrZXkiOiJ0eF9pZCIsInZhbHVlIjoiMHg1NDA5MGMxNmE3MDJiNzUzYjQzMTE0ZTg4NGJjMTlhODBhNzk2MzhmZDQ0OWE0MGY4MDY4Y2RmMDAzY2RlNmUwIiwiZW5hYmxlZCI6dHJ1ZX0seyJrZXkiOiJjb250cmFjdF9pZCIsInZhbHVlIjoiU1RKVFhFSlBKUFBWRE5BOUIwNTJOU1JSQkdRQ0ZOS1ZTMTc4VkdIMS5oZWxsb193b3JsZFxuIiwiZW5hYmxlZCI6dHJ1ZX0seyJrZXkiOiJidGNfYWRkcmVzcyIsInZhbHVlIjoiYWJjIiwiZW5hYmxlZCI6dHJ1ZX0seyJrZXkiOiJjb250cmFjdF9hZGRyZXNzIiwidmFsdWUiOiJTVEpUWEVKUEpQUFZETkE5QjA1Mk5TUlJCR1FDRk5LVlMxNzhWR0gxIiwiZW5hYmxlZCI6dHJ1ZX0seyJrZXkiOiJjb250cmFjdF9uYW1lIiwidmFsdWUiOiJoZWxsb193b3JsZCIsImVuYWJsZWQiOnRydWV9LHsia2V5IjoiY29udHJhY3RfbWFwIiwidmFsdWUiOiJzdG9yZSIsImVuYWJsZWQiOnRydWV9LHsia2V5IjoiY29udHJhY3RfbWV0aG9kIiwidmFsdWUiOiJnZXQtdmFsdWUiLCJlbmFibGVkIjp0cnVlfV0=) 
 *
 * The version of the OpenAPI document: 1.0.0
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */


import * as runtime from '../runtime';
import {
    BurnchainRewardListResponse,
    BurnchainRewardListResponseFromJSON,
    BurnchainRewardListResponseToJSON,
    BurnchainRewardsTotal,
    BurnchainRewardsTotalFromJSON,
    BurnchainRewardsTotalToJSON,
} from '../models';

export interface GetBurnchainRewardListRequest {
    limit?: number;
    offset?: number;
}

export interface GetBurnchainRewardListByAddressRequest {
    address: string;
    limit?: number;
    offset?: number;
}

export interface GetBurnchainRewardsTotalByAddressRequest {
    address: string;
}

/**
 * BurnchainApi - interface
 * 
 * @export
 * @interface BurnchainApiInterface
 */
export interface BurnchainApiInterface {
    /**
     * Get a list of recent burnchain (e.g. Bitcoin) reward recipients with the associated amounts and block info
     * @summary Get recent burnchain reward recipients
     * @param {number} [limit] max number of rewards to fetch
     * @param {number} [offset] index of first rewards to fetch
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof BurnchainApiInterface
     */
    getBurnchainRewardListRaw(requestParameters: GetBurnchainRewardListRequest): Promise<runtime.ApiResponse<BurnchainRewardListResponse>>;

    /**
     * Get a list of recent burnchain (e.g. Bitcoin) reward recipients with the associated amounts and block info
     * Get recent burnchain reward recipients
     */
    getBurnchainRewardList(requestParameters: GetBurnchainRewardListRequest): Promise<BurnchainRewardListResponse>;

    /**
     * Get a list of recent burnchain (e.g. Bitcoin) rewards for the given recipient with the associated amounts and block info
     * @summary Get recent burnchain reward for the given recipient
     * @param {string} address Reward recipient address. Should either be in the native burnchain\&#39;s format (e.g. B58 for Bitcoin), or if a STX principal address is provided it will be encoded as into the equivalent burnchain format
     * @param {number} [limit] max number of rewards to fetch
     * @param {number} [offset] index of first rewards to fetch
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof BurnchainApiInterface
     */
    getBurnchainRewardListByAddressRaw(requestParameters: GetBurnchainRewardListByAddressRequest): Promise<runtime.ApiResponse<BurnchainRewardListResponse>>;

    /**
     * Get a list of recent burnchain (e.g. Bitcoin) rewards for the given recipient with the associated amounts and block info
     * Get recent burnchain reward for the given recipient
     */
    getBurnchainRewardListByAddress(requestParameters: GetBurnchainRewardListByAddressRequest): Promise<BurnchainRewardListResponse>;

    /**
     * Get the total burnchain (e.g. Bitcoin) rewards for the given recipient
     * @summary Get total burnchain rewards for the given recipient
     * @param {string} address Reward recipient address. Should either be in the native burnchain\&#39;s format (e.g. B58 for Bitcoin), or if a STX principal address is provided it will be encoded as into the equivalent burnchain format
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof BurnchainApiInterface
     */
    getBurnchainRewardsTotalByAddressRaw(requestParameters: GetBurnchainRewardsTotalByAddressRequest): Promise<runtime.ApiResponse<BurnchainRewardsTotal>>;

    /**
     * Get the total burnchain (e.g. Bitcoin) rewards for the given recipient
     * Get total burnchain rewards for the given recipient
     */
    getBurnchainRewardsTotalByAddress(requestParameters: GetBurnchainRewardsTotalByAddressRequest): Promise<BurnchainRewardsTotal>;

}

/**
 * 
 */
export class BurnchainApi extends runtime.BaseAPI implements BurnchainApiInterface {

    /**
     * Get a list of recent burnchain (e.g. Bitcoin) reward recipients with the associated amounts and block info
     * Get recent burnchain reward recipients
     */
    async getBurnchainRewardListRaw(requestParameters: GetBurnchainRewardListRequest): Promise<runtime.ApiResponse<BurnchainRewardListResponse>> {
        const queryParameters: runtime.HTTPQuery = {};

        if (requestParameters.limit !== undefined) {
            queryParameters['limit'] = requestParameters.limit;
        }

        if (requestParameters.offset !== undefined) {
            queryParameters['offset'] = requestParameters.offset;
        }

        const headerParameters: runtime.HTTPHeaders = {};

        const response = await this.request({
            path: `/extended/v1/burnchain/rewards`,
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        });

        return new runtime.JSONApiResponse(response, (jsonValue) => BurnchainRewardListResponseFromJSON(jsonValue));
    }

    /**
     * Get a list of recent burnchain (e.g. Bitcoin) reward recipients with the associated amounts and block info
     * Get recent burnchain reward recipients
     */
    async getBurnchainRewardList(requestParameters: GetBurnchainRewardListRequest): Promise<BurnchainRewardListResponse> {
        const response = await this.getBurnchainRewardListRaw(requestParameters);
        return await response.value();
    }

    /**
     * Get a list of recent burnchain (e.g. Bitcoin) rewards for the given recipient with the associated amounts and block info
     * Get recent burnchain reward for the given recipient
     */
    async getBurnchainRewardListByAddressRaw(requestParameters: GetBurnchainRewardListByAddressRequest): Promise<runtime.ApiResponse<BurnchainRewardListResponse>> {
        if (requestParameters.address === null || requestParameters.address === undefined) {
            throw new runtime.RequiredError('address','Required parameter requestParameters.address was null or undefined when calling getBurnchainRewardListByAddress.');
        }

        const queryParameters: runtime.HTTPQuery = {};

        if (requestParameters.limit !== undefined) {
            queryParameters['limit'] = requestParameters.limit;
        }

        if (requestParameters.offset !== undefined) {
            queryParameters['offset'] = requestParameters.offset;
        }

        const headerParameters: runtime.HTTPHeaders = {};

        const response = await this.request({
            path: `/extended/v1/burnchain/rewards/{address}`.replace(`{${"address"}}`, encodeURIComponent(String(requestParameters.address))),
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        });

        return new runtime.JSONApiResponse(response, (jsonValue) => BurnchainRewardListResponseFromJSON(jsonValue));
    }

    /**
     * Get a list of recent burnchain (e.g. Bitcoin) rewards for the given recipient with the associated amounts and block info
     * Get recent burnchain reward for the given recipient
     */
    async getBurnchainRewardListByAddress(requestParameters: GetBurnchainRewardListByAddressRequest): Promise<BurnchainRewardListResponse> {
        const response = await this.getBurnchainRewardListByAddressRaw(requestParameters);
        return await response.value();
    }

    /**
     * Get the total burnchain (e.g. Bitcoin) rewards for the given recipient
     * Get total burnchain rewards for the given recipient
     */
    async getBurnchainRewardsTotalByAddressRaw(requestParameters: GetBurnchainRewardsTotalByAddressRequest): Promise<runtime.ApiResponse<BurnchainRewardsTotal>> {
        if (requestParameters.address === null || requestParameters.address === undefined) {
            throw new runtime.RequiredError('address','Required parameter requestParameters.address was null or undefined when calling getBurnchainRewardsTotalByAddress.');
        }

        const queryParameters: runtime.HTTPQuery = {};

        const headerParameters: runtime.HTTPHeaders = {};

        const response = await this.request({
            path: `/extended/v1/burnchain/rewards/{address}/total`.replace(`{${"address"}}`, encodeURIComponent(String(requestParameters.address))),
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        });

        return new runtime.JSONApiResponse(response, (jsonValue) => BurnchainRewardsTotalFromJSON(jsonValue));
    }

    /**
     * Get the total burnchain (e.g. Bitcoin) rewards for the given recipient
     * Get total burnchain rewards for the given recipient
     */
    async getBurnchainRewardsTotalByAddress(requestParameters: GetBurnchainRewardsTotalByAddressRequest): Promise<BurnchainRewardsTotal> {
        const response = await this.getBurnchainRewardsTotalByAddressRaw(requestParameters);
        return await response.value();
    }

}
