{{>licenseInfo}}
import Client from "../client";
import getJsonResponse from "../helpers/getJsonResponse";
import Service from "../service";
{{#imports}}
import { {{classname}} } from "../typings/{{serviceName}}/models";
{{/imports}}
import { IRequest } from "../typings/requestOptions";
import Resource from "./resource";
import { ObjectSerializer } from "../typings/{{serviceName}}/models";

{{#operations}}
export class {{#lambda.pascalcase}}{{ apiPackage }}{{/lambda.pascalcase}}API extends Service {
    
    private readonly API_BASEPATH: string = "{{{basePath}}}";
    private baseUrl: string;

    public constructor(client: Client) {
        super(client);
        this.baseUrl = this.createBaseUrl(this.API_BASEPATH);
    }
{{#operation}}

{{>api_summary}}
    public async {{#vendorExtensions.x-methodName}}{{.}}{{/vendorExtensions.x-methodName}}{{^vendorExtensions.x-methodName}}{{nickname}}{{/vendorExtensions.x-methodName}}({{#pathParams}}{{paramName}}: {{{dataType}}}, {{/pathParams}}{{#bodyParams}}{{paramName}}: {{{dataType}}}, {{/bodyParams}}requestOptions?: IRequest.Options): Promise<{{#returnType}}{{{.}}}{{/returnType}}{{^returnType}}void{{/returnType}}> {
        const endpoint = `${this.baseUrl}{{{path}}}`{{#pathParams}}
            .replace("{" + "{{baseName}}" + "}", encodeURIComponent(String({{paramName}}))){{/pathParams}};
        const resource = new Resource(this, endpoint);
{{#bodyParam}}
        const request: {{{dataType}}} = ObjectSerializer.serialize({{paramName}}, "{{{dataType}}}");
{{/bodyParam}}
        {{#returnType}}const response = {{/returnType}}await getJsonResponse<{{#bodyParam}}{{{dataType}}}{{/bodyParam}}{{^bodyParam}}string{{/bodyParam}}, {{#returnType}}{{{.}}}{{/returnType}}{{^returnType}}void{{/returnType}}>(
            resource,
            {{#bodyParam}}request{{/bodyParam}}{{^bodyParam}}""{{/bodyParam}},
            { ...requestOptions, method: "{{httpMethod}}" }
        );
        {{#returnType}}
        return ObjectSerializer.deserialize(response, "{{{.}}}");
        {{/returnType}}
    }
{{/operation}}
}

export default {{#lambda.pascalcase}}{{ apiPackage }}{{/lambda.pascalcase}}API;
{{/operations}}
