<?php
/**
 * {{classname}}
 * PHP version 5
 *
 * @category Class
 * @package  {{invokerPackage}}
 * @author   http://github.com/swagger-api/swagger-codegen
 * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache Licene v2
 * @link     https://github.com/swagger-api/swagger-codegen
 */
/**
 *  Copyright 2015 SmartBear Software
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

/**
 * NOTE: This class is auto generated by the swagger code generator program. 
 * https://github.com/swagger-api/swagger-codegen 
 * Do not edit the class manually.
 */

namespace {{apiPackage}};

use \{{invokerPackage}}\Configuration;
use \{{invokerPackage}}\ApiClient;
use \{{invokerPackage}}\ApiException;
use \{{invokerPackage}}\ObjectSerializer;

/**
 * {{classname}} Class Doc Comment
 *
 * @category Class
 * @package  {{invokerPackage}}
 * @author   http://github.com/swagger-api/swagger-codegen
 * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache Licene v2
 * @link     https://github.com/swagger-api/swagger-codegen
 */
{{#operations}}class {{classname}}
{

    /**
     * API Client
     * @var \{{invokerPackage}}\ApiClient instance of the ApiClient
     */
    protected $apiClient;
  
    /**
     * Constructor
     * @param \{{invokerPackage}}\ApiClient|null $apiClient The api client to use
     */
    function __construct($apiClient = null)
    {
        if ($apiClient == null) {
            $apiClient = new ApiClient();
            $apiClient->getConfig()->setHost('{{basePath}}');
        }
  
        $this->apiClient = $apiClient;
    }
  
    /**
     * Get API client
     * @return \{{invokerPackage}}\ApiClient get the API client
     */
    public function getApiClient()
    {
        return $this->apiClient;
    }
  
    /**
     * Set the API client
     * @param \{{invokerPackage}}\ApiClient $apiClient set the API client
     * @return {{classname}}
     */
    public function setApiClient(ApiClient $apiClient)
    {
        $this->apiClient = $apiClient;
        return $this;
    }
  
    {{#operation}}
    /**
     * {{{nickname}}}
     *
     * {{{summary}}}
     *
  {{#allParams}}   * @param {{dataType}} ${{paramName}} {{description}} {{#required}}(required){{/required}}{{^required}}(optional){{/required}}
  {{/allParams}}   * @return {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}
     * @throws \{{invokerPackage}}\ApiException on non-2xx response
     */
    public function {{nickname}}({{#allParams}}${{paramName}}{{^required}}=null{{/required}}{{#hasMore}}, {{/hasMore}}{{/allParams}})
    {
        {{#allParams}}{{#required}}
        // verify the required parameter '{{paramName}}' is set
        if (${{paramName}} === null) {
            throw new \InvalidArgumentException('Missing the required parameter ${{paramName}} when calling {{nickname}}');
        }{{/required}}{{/allParams}}
  
        // parse inputs
        $resourcePath = "{{path}}";
        $resourcePath = str_replace("{format}", "json", $resourcePath);
        $method = "{{httpMethod}}";
        $httpBody = '';
        $queryParams = array();
        $headerParams = array();
        $formParams = array();
        $_header_accept = ApiClient::selectHeaderAccept(array({{#produces}}'{{mediaType}}'{{#hasMore}}, {{/hasMore}}{{/produces}}));
        if (!is_null($_header_accept)) {
            $headerParams['Accept'] = $_header_accept;
        }
        $headerParams['Content-Type'] = ApiClient::selectHeaderContentType(array({{#consumes}}'{{mediaType}}'{{#hasMore}},{{/hasMore}}{{/consumes}}));
  
        {{#queryParams}}// query params
        if (${{paramName}} !== null) {
            $queryParams['{{baseName}}'] = $this->apiClient->getSerializer()->toQueryValue(${{paramName}});
        }{{/queryParams}}
        {{#headerParams}}// header params
        if (${{paramName}} !== null) {
            $headerParams['{{baseName}}'] = $this->apiClient->getSerializer()->toHeaderValue(${{paramName}});
        }{{/headerParams}}
        {{#pathParams}}// path params
        if (${{paramName}} !== null) {
            $resourcePath = str_replace(
                "{" . "{{baseName}}" . "}",
                $this->apiClient->getSerializer()->toPathValue(${{paramName}}),
                $resourcePath
            );
        }{{/pathParams}}
        {{#formParams}}// form params
        if (${{paramName}} !== null) {
            $formParams['{{baseName}}'] = {{#isFile}}'@' . {{/isFile}}$this->apiClient->getSerializer()->toFormValue(${{paramName}});
        }{{/formParams}}
        {{#bodyParams}}// body params
        $_tempBody = null;
        if (isset(${{paramName}})) {
            $_tempBody = ${{paramName}};
        }{{/bodyParams}}
  
        // for model (json/xml)
        if (isset($_tempBody)) {
            $httpBody = $_tempBody; // $_tempBody is the method argument, if present
        } else if (count($formParams) > 0) {
            $httpBody = $formParams; // for HTTP post (form)
        }
        {{#authMethods}}{{#isApiKey}}
        $apiKey = $this->apiClient->getApiKeyWithPrefix('{{keyParamName}}');
        if (isset($apiKey)) {
            {{#isKeyInHeader}}$headerParams['{{keyParamName}}'] = $apiKey;{{/isKeyInHeader}}{{#isKeyInQuery}}$queryParams['{{keyParamName}}'] = $apiKey;{{/isKeyInQuery}}
        }{{/isApiKey}}
        {{#isBasic}}$headerParams['Authorization'] = 'Basic '.base64_encode($this->apiClient->getConfig()->getUsername().":".$this->apiClient->getConfig()->getPassword());{{/isBasic}}
        {{#isOAuth}}//TODO support oauth{{/isOAuth}}
        {{/authMethods}}
        // make the API Call
        try
        {
            list($response, $httpHeader) = $this->apiClient->callApi(
                $resourcePath, $method,
                $queryParams, $httpBody,
                $headerParams{{#returnType}}, '{{returnType}}'{{/returnType}}
            );
            {{#returnType}}
            if (!$response) {
                return null;
            }

            return $this->apiClient->getSerializer()->deserialize($response, '{{returnType}}', $httpHeader);
            {{/returnType}}
        } catch (ApiException $e) {
            switch ($e->getCode()) { {{#responses}}{{#dataType}}
            case {{code}}:
                $data = $this->apiClient->getSerializer()->deserialize($e->getResponseBody(), '{{dataType}}', $e->getResponseHeaders());
                $e->setResponseObject($data);
                break;{{/dataType}}{{/responses}}
            }
  
            throw $e;
        }
        {{#returnType}}
        return null;
        {{/returnType}}
    }
    {{/operation}}
}
{{/operations}}
