package {{package}};

import {{invokerPackage}}.ApiClient;
{{#legacyDates}}
import {{invokerPackage}}.ParamExpander;
{{/legacyDates}}

{{#imports}}import {{import}};
{{/imports}}

{{^fullJavaUtil}}
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
{{/fullJavaUtil}}
import feign.*;

{{>generatedAnnotation}}
public interface {{classname}} extends ApiClient.Api {

{{#operations}}{{#operation}}
  /**
   * {{summary}}
   * {{notes}}
{{#allParams}}
    * @param {{paramName}} {{description}}{{#required}} (required){{/required}}{{^required}} (optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}}
{{/allParams}}
{{#returnType}}
   * @return {{returnType}}
{{/returnType}}
   */
  @RequestLine("{{httpMethod}} {{{path}}}{{#hasQueryParams}}?{{/hasQueryParams}}{{#queryParams}}{{baseName}}={{=<% %>=}}{<%paramName%>}<%={{ }}=%>{{#hasMore}}&{{/hasMore}}{{/queryParams}}")
  @Headers({
    "Content-Type: {{vendorExtensions.x-contentType}}",
    "Accept: {{vendorExtensions.x-accepts}}",{{#headerParams}}
    "{{baseName}}: {{=<% %>=}}{<%paramName%>}<%={{ }}=%>"{{#hasMore}},
    {{/hasMore}}{{/headerParams}}
  })
  {{#returnType}}{{{returnType}}} {{/returnType}}{{^returnType}}void {{/returnType}}{{nickname}}({{#allParams}}{{^isBodyParam}}{{^legacyDates}}@Param("{{paramName}}") {{/legacyDates}}{{#legacyDates}}@Param(value="{{paramName}}", expander=ParamExpander.class) {{/legacyDates}}{{/isBodyParam}}{{{dataType}}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}});
  {{/operation}}
{{/operations}}
}
