{{=<% %>=}}
/* tslint:disable */
import {HttpClient, HttpHeaders, HttpParams<%#importHttpResponse%>, HttpResponse<%/importHttpResponse%>} from '@angular/common/http';
import {Inject, Injectable} from '@angular/core';
import {Observable} from 'rxjs';
import {API_BASE_PATH} from '../api-module-config';
import {EndpointReference<%#hasRefType%>, Ref<%/hasRefType%><%#hasSort%>, Sort<%/hasSort%>} from 'wl-swagger';
import {<%#refs%><%name%><%^last%>, <%/last%><%/refs%>} from '../models';

@Injectable({providedIn: 'root'})
export class <%&name%> {
    public constructor(private readonly http: HttpClient, @Inject(API_BASE_PATH) private readonly basePath: string) {
    }
<%#methods%>

    /**
    <%#summaryLines%>
     * <%&.%>
    <%/summaryLines%>
     *
     * @method
     * @name <%&methodName%>
    <%#parameters%>
     <%^isSingleton%>* @param <%&camelCaseName%> - <%&description%><%/isSingleton%>
    <%/parameters%>
    <%#hasOptionalParameters%>
     * @param opts
    <%/hasOptionalParameters%>
     * @return <%&typescriptReturnType%>
     */
    @EndpointReference('<%&method%> <%&path%>')
<%#hasSort%>
    @Sort({
    <%#sort%>
        "<%key%>": "<%value%>",
    <%/sort%>
    })
<%/hasSort%>
    public <%&methodName%>(<%#parameters%><%&camelCaseName%>: <%&typescriptType%><%#default%> = <%&default%><%/default%><%^last%>, <%/last%><%/parameters%><%#hasOptionalParameters%>opts?: {<%#optionalParameters%><%&camelCaseName%>?: <%&typescriptType%><%#default%> = <%&default%><%/default%><%^last%>, <%/last%><%/optionalParameters%>}<%/hasOptionalParameters%>): Observable<<%&typescriptReturnType%>> {
        let queryParameters = new HttpParams();
        let headers = new HttpHeaders();
        headers = headers.set('Content-Type', '<%&contentType%>');
    <%#allParameters%>
        <%#isQueryParameter%>
            <%#isSingleton%>
        queryParameters = queryParameters.set('<%&name%>', '<%&singleton%>');
            <%/isSingleton%>
            <%^isSingleton%>
                <%#isPatternType%>
        Object.keys(parameters).forEach(function(parameterName) {
            if(new RegExp('<%&pattern%>').test(parameterName)){
                queryParameters = queryParameters.set(parameterName, parameters[parameterName]);
            }
        });
                <%/isPatternType%>
                <%^isPatternType%>
                    <%#isRequired%>
                        <%^isArray%>
        queryParameters = queryParameters.set('<%&name%>', String(<%&camelCaseName%>));
                        <%/isArray%>
                        <%#isArray%>
        for(const _<%&camelCaseName%>Element_ of <%&camelCaseName%>) {
            queryParameters = queryParameters.append('<%&name%>', String(_<%&camelCaseName%>Element_));
        }
                        <%/isArray%>
                    <%/isRequired%>
                    <%^isRequired%>
        if(opts !== undefined && opts.<%&camelCaseName%> !== undefined){
                        <%^isArray%>
            queryParameters = queryParameters.set('<%&name%>', String(opts.<%&camelCaseName%>));
                        <%/isArray%>
                        <%#isArray%>
            for(const _<%&camelCaseName%>Element_ of opts.<%&camelCaseName%>) {
                queryParameters = queryParameters.append('<%&name%>', String(_<%&camelCaseName%>Element_));
            }
                        <%/isArray%>
        }
                    <%/isRequired%>
                <%/isPatternType%>
            <%/isSingleton%>
        <%/isQueryParameter%>
        <%#isHeaderParameter%>
            <%#isSingleton%>
        headers = headers.set('<%&name%>', '<%&singleton%>');
            <%/isSingleton%>
            <%^isSingleton%>
                <%#isRequired%>
                    <%^isArray%>
        headers = headers.set('<%&name%>', String(<%&camelCaseName%>));
                    <%/isArray%>
                    <%#isArray%>
        for(const _<%&camelCaseName%>Element_ of <%&camelCaseName%>) {
            headers = headers.append('<%&name%>', String(_<%&camelCaseName%>Element_));
        }
                    <%/isArray%>
                <%/isRequired%>
                <%^isRequired%>
        if(<%&camelCaseName%> !== undefined){
                    <%^isArray%>
            headers = headers.set('<%&name%>', String(<%&camelCaseName%>));
                    <%/isArray%>
                    <%#isArray%>
            for(const _<%&camelCaseName%>Element_ of <%&camelCaseName%>) {
                headers = headers.append('<%&name%>', String(_<%&camelCaseName%>Element_));
            }
                    <%/isArray%>
        }
                <%/isRequired%>
            <%/isSingleton%>
        <%/isHeaderParameter%>
        <%#isFormParameter%>
            <%#isSingleton%>
        form['<%&name%>'] = '<%&singleton%>';
            <%/isSingleton%>
            <%^isSingleton%>
                <%#isRequired%>
        form['<%&name%>'] = <%&camelCaseName%>;
                <%/isRequired%>
                <%^isRequired%>
        if(<%&camelCaseName%> !== undefined){
            form['<%&name%>'] = <%&camelCaseName%>;
        }
                <%/isRequired%>
            <%/isSingleton%>
        <%/isFormParameter%>
        <%#isPathParameter%>
            <%#isSingleton%>
        const <%&name%>PathSegment = encodeURIComponent('<%&singleton%>');
            <%/isSingleton%>
            <%^isSingleton%>
        const <%&name%>PathSegment = encodeURIComponent(String(<%&camelCaseName%>));
            <%/isSingleton%>
        <%/isPathParameter%>
        <%#isBodyParameter%>
            <%#isRequired%>
        const body = <%&camelCaseName%>;
            <%/isRequired%>
            <%^isRequired%>
        const body = opts !== undefined ? opts.<%&camelCaseName%> : undefined;
            <%/isRequired%>
        <%/isBodyParameter%>
    <%/allParameters%>

        const uri = `<%&backTickPath%>`;

        return this.http
            .<%angular2httpMethod%><%^responseType%><<%&typescriptReturnType%>><%/responseType%>(this.basePath + uri<%#hasPayload%>, <%#hasBodyParameter%>body<%/hasBodyParameter%><%^hasBodyParameter%>undefined<%/hasBodyParameter%><%/hasPayload%>,
            { headers: headers, params: queryParameters<%#responseType%>, responseType: '<%&.%>'<%/responseType%><%#observeResponse%>, observe: 'response'<%/observeResponse%> });
    }
<%/methods%>

}
