/* tslint:disable */
/* eslint-disable */
/**
 * Grand Archive TCG API
 * See https://index.gatcg.com/api
 *
 * The version of the OpenAPI document: 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 type {
  CardSearch,
  FullCard,
} from '../models/index';
import {
    CardSearchFromJSON,
    CardSearchToJSON,
    FullCardFromJSON,
    FullCardToJSON,
} from '../models/index';

export interface CardsAutocompleteGetRequest {
    name: string;
}

export interface CardsEditionEditionSlugGetRequest {
    editionSlug: string;
}

export interface CardsPrefixCollectorNumberGetRequest {
    prefix: string;
    collectorNumber: string;
}

export interface CardsRandomGetRequest {
    amount?: number;
}

export interface CardsSearchGetRequest {
    name: string;
    stats?: string;
}

export interface CardsSlugGetRequest {
    slug: string;
}

/**
 * 
 */
export class DefaultApi extends runtime.BaseAPI {

    /**
     */
    async cardsAutocompleteGetRaw(requestParameters: CardsAutocompleteGetRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<void>> {
        if (requestParameters['name'] == null) {
            throw new runtime.RequiredError(
                'name',
                'Required parameter "name" was null or undefined when calling cardsAutocompleteGet().'
            );
        }

        const queryParameters: any = {};

        if (requestParameters['name'] != null) {
            queryParameters['name'] = requestParameters['name'];
        }

        const headerParameters: runtime.HTTPHeaders = {};

        const response = await this.request({
            path: `/cards/autocomplete`,
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.VoidApiResponse(response);
    }

    /**
     */
    async cardsAutocompleteGet(requestParameters: CardsAutocompleteGetRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<void> {
        await this.cardsAutocompleteGetRaw(requestParameters, initOverrides);
    }

    /**
     */
    async cardsEditionEditionSlugGetRaw(requestParameters: CardsEditionEditionSlugGetRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<void>> {
        if (requestParameters['editionSlug'] == null) {
            throw new runtime.RequiredError(
                'editionSlug',
                'Required parameter "editionSlug" was null or undefined when calling cardsEditionEditionSlugGet().'
            );
        }

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        const response = await this.request({
            path: `/cards/edition/{editionSlug}`.replace(`{${"editionSlug"}}`, encodeURIComponent(String(requestParameters['editionSlug']))),
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.VoidApiResponse(response);
    }

    /**
     */
    async cardsEditionEditionSlugGet(requestParameters: CardsEditionEditionSlugGetRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<void> {
        await this.cardsEditionEditionSlugGetRaw(requestParameters, initOverrides);
    }

    /**
     */
    async cardsPrefixCollectorNumberGetRaw(requestParameters: CardsPrefixCollectorNumberGetRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<void>> {
        if (requestParameters['prefix'] == null) {
            throw new runtime.RequiredError(
                'prefix',
                'Required parameter "prefix" was null or undefined when calling cardsPrefixCollectorNumberGet().'
            );
        }

        if (requestParameters['collectorNumber'] == null) {
            throw new runtime.RequiredError(
                'collectorNumber',
                'Required parameter "collectorNumber" was null or undefined when calling cardsPrefixCollectorNumberGet().'
            );
        }

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        const response = await this.request({
            path: `/cards/{prefix}/{collectorNumber}`.replace(`{${"prefix"}}`, encodeURIComponent(String(requestParameters['prefix']))).replace(`{${"collectorNumber"}}`, encodeURIComponent(String(requestParameters['collectorNumber']))),
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.VoidApiResponse(response);
    }

    /**
     */
    async cardsPrefixCollectorNumberGet(requestParameters: CardsPrefixCollectorNumberGetRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<void> {
        await this.cardsPrefixCollectorNumberGetRaw(requestParameters, initOverrides);
    }

    /**
     */
    async cardsRandomGetRaw(requestParameters: CardsRandomGetRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<FullCard>> {
        const queryParameters: any = {};

        if (requestParameters['amount'] != null) {
            queryParameters['amount'] = requestParameters['amount'];
        }

        const headerParameters: runtime.HTTPHeaders = {};

        const response = await this.request({
            path: `/cards/random`,
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

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

    /**
     */
    async cardsRandomGet(requestParameters: CardsRandomGetRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<FullCard> {
        const response = await this.cardsRandomGetRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     */
    async cardsSearchGetRaw(requestParameters: CardsSearchGetRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<CardSearch>> {
        if (requestParameters['name'] == null) {
            throw new runtime.RequiredError(
                'name',
                'Required parameter "name" was null or undefined when calling cardsSearchGet().'
            );
        }

        const queryParameters: any = {};

        if (requestParameters['name'] != null) {
            queryParameters['name'] = requestParameters['name'];
        }

        if (requestParameters['stats'] != null) {
            queryParameters['stats'] = requestParameters['stats'];
        }

        const headerParameters: runtime.HTTPHeaders = {};

        const response = await this.request({
            path: `/cards/search`,
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

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

    /**
     */
    async cardsSearchGet(requestParameters: CardsSearchGetRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<CardSearch | null | undefined > {
        const response = await this.cardsSearchGetRaw(requestParameters, initOverrides);
        switch (response.raw.status) {
            case 200:
                return await response.value();
            case 204:
                return null;
            default:
                return await response.value();
        }
    }

    /**
     */
    async cardsSlugGetRaw(requestParameters: CardsSlugGetRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<FullCard>> {
        if (requestParameters['slug'] == null) {
            throw new runtime.RequiredError(
                'slug',
                'Required parameter "slug" was null or undefined when calling cardsSlugGet().'
            );
        }

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        const response = await this.request({
            path: `/cards/{slug}`.replace(`{${"slug"}}`, encodeURIComponent(String(requestParameters['slug']))),
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

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

    /**
     */
    async cardsSlugGet(requestParameters: CardsSlugGetRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<FullCard | null | undefined > {
        const response = await this.cardsSlugGetRaw(requestParameters, initOverrides);
        switch (response.raw.status) {
            case 200:
                return await response.value();
            case 204:
                return null;
            default:
                return await response.value();
        }
    }

}
