<?php
/**
 *  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. Do not edit the class manually.
 */

namespace {{invokerPackage}};

{{#operations}}
class {{classname}} {

  function __construct($apiClient = null) {
    if (null === $apiClient) {
      if (Configuration::$apiClient === null) {
        Configuration::$apiClient = new ApiClient(); // create a new API client if not present
        $this->apiClient = Configuration::$apiClient;
      }
      else
        $this->apiClient = Configuration::$apiClient; // use the default one
    } else {
      $this->apiClient = $apiClient; // use the one provided by the user
    }
  }

  private $apiClient; // instance of the ApiClient

  /**
   * get the API client
   */
  public function getApiClient() {
    return $this->apiClient;
  }

  /**
   * set the API client
   */
  public function setApiClient($apiClient) {
    $this->apiClient = $apiClient;
  }

  {{#operation}}
  /**
   * {{{nickname}}}
   *
   * {{{summary}}}
   *
{{#allParams}}   * @param {{dataType}} ${{paramName}} {{description}} {{^optional}}(required){{/optional}}{{#optional}}(optional){{/optional}}
{{/allParams}}   * @return {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}
   */
   public function {{nickname}}({{#allParams}}${{paramName}}{{#optional}}=null{{/optional}}{{#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 = $this->apiClient->selectHeaderAccept(array({{#produces}}'{{mediaType}}'{{#hasMore}}, {{/hasMore}}{{/produces}}));
      if (!is_null($_header_accept)) {
        $headerParams['Accept'] = $_header_accept;
      }
      $headerParams['Content-Type'] = $this->apiClient->selectHeaderContentType(array({{#consumes}}'{{mediaType}}'{{#hasMore}},{{/hasMore}}{{/consumes}}));

      {{#queryParams}}// query params
      if(${{paramName}} !== null) {
        $queryParams['{{baseName}}'] = $this->apiClient->toQueryValue(${{paramName}});
      }{{/queryParams}}
      {{#headerParams}}// header params
      if(${{paramName}} !== null) {
        $headerParams['{{baseName}}'] = $this->apiClient->toHeaderValue(${{paramName}});
      }{{/headerParams}}
      {{#pathParams}}// path params
      if(${{paramName}} !== null) {
        $resourcePath = str_replace("{" . "{{baseName}}" . "}",
                                    $this->apiClient->toPathValue(${{paramName}}), $resourcePath);
      }{{/pathParams}}
      {{#formParams}}// form params
      if (${{paramName}} !== null) {
        $formParams['{{baseName}}'] = {{#isFile}}'@' . {{/isFile}}$this->apiClient->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) {
        // for HTTP post (form)
        $httpBody = $formParams;
      }

      // authentication setting, if any
      $authSettings = array({{#authMethods}}'{{name}}'{{#hasMore}}, {{/hasMore}}{{/authMethods}});

      // make the API Call
      $response = $this->apiClient->callAPI($resourcePath, $method,
                                            $queryParams, $httpBody,
                                            $headerParams, $authSettings);

      {{#returnType}}if(! $response) {
        return null;
      }

      $responseObject = $this->apiClient->deserialize($response,'{{returnType}}');
      return $responseObject;{{/returnType}}
  }
  {{/operation}}
{{newline}}
{{/operations}}
}
