﻿let url_ = this.baseUrl + "/{{ operation.Path }}{% if operation.HasQueryParameters %}?{% endif %}";
{% for parameter in operation.PathParameters -%}
{%    if parameter.IsRequired -%}
if ({{ parameter.VariableName }} === undefined || {{ parameter.VariableName }} === null)
  throw new Error("The parameter '{{ parameter.VariableName }}' must be defined.");
{%    else -%}
if ({{ parameter.VariableName }} !== null && {{ parameter.VariableName }} !== undefined)
{%    endif -%}
{%    if parameter.IsDateArray -%}
url_ = url_.replace("{{ "{" }}{{ parameter.Name }}}", encodeURIComponent({{ parameter.VariableName }}.map(s_ => s_ ? formatDate(s_) : "null").join()));
{%    elsif parameter.IsDateTimeArray -%}
url_ = url_.replace("{{ "{" }}{{ parameter.Name }}}", encodeURIComponent({{ parameter.VariableName }}.map(s_ => s_ ? s_.{{ parameter.GetDateTimeToString }} : "null").join()));
{%    elsif parameter.IsDate -%}
    url_ = url_.replace("{{ "{" }}{{ parameter.Name }}}", encodeURIComponent({{ parameter.VariableName }} ? "" + formatDate({{ parameter.VariableName }}) : "null"));
{%    elsif parameter.IsDateTime -%}
url_ = url_.replace("{{ "{" }}{{ parameter.Name }}}", encodeURIComponent({{ parameter.VariableName }} ? "" + {{ parameter.VariableName }}.{{ parameter.GetDateTimeToString }} : "null"));
{%    elsif parameter.IsArray -%}
url_ = url_.replace("{{ "{" }}{{ parameter.Name }}}", encodeURIComponent({{ parameter.VariableName }}.join()));
{%    else -%}
url_ = url_.replace("{{ "{" }}{{ parameter.Name }}}", encodeURIComponent("" + {{ parameter.VariableName }}));
{%    endif -%}
{%    if parameter.IsOptional -%}
else
  url_ = url_.replace("/{{ "{" }}{{ parameter.Name }}}", "");
{%    endif -%}
{% endfor -%}
{% for parameter in operation.QueryParameters -%}
{%    if parameter.IsRequired -%}
{%        if parameter.IsNullable -%}
if ({{ parameter.VariableName }} === undefined)
  throw new Error("The parameter '{{ parameter.VariableName }}' must be defined.");
else if({{ parameter.VariableName }} !== null)
{%        else -%}
  if ({{ parameter.VariableName }} === undefined || {{ parameter.VariableName }} === null)
    throw new Error("The parameter '{{ parameter.VariableName }}' must be defined and cannot be null.");
  else
{%        endif -%}
{%    else -%}
{%        if parameter.IsNullable -%}
if ({{ parameter.VariableName }} !== undefined && {{ parameter.VariableName }} !== null)
{%        else -%}
if ({{ parameter.VariableName }} === null)
    throw new Error("The parameter '{{ parameter.VariableName }}' cannot be null.");
else if ({{ parameter.VariableName }} !== undefined)
{%        endif -%}
{%    endif -%}
{%    if parameter.IsContentSerializationTypeJson -%}
{
    {%- assign serializeParameter = parameter -%}
    {% template Client.RequestBody.Serialize %}
    url_ += "{{ parameter.Name }}=" + encodeURIComponent(content_) + "&";
}
{%    elsif parameter.IsDateArray -%}
    {{ parameter.VariableName }} && {{ parameter.VariableName }}.forEach(item_ => { url_ += "{{ parameter.Name }}=" + encodeURIComponent(item_ ? "" + formatDate(item_) : "null") + "&"; });
{%    elsif parameter.IsDateOrDateTimeArray -%}
    {{ parameter.VariableName }} && {{ parameter.VariableName }}.forEach(item_ => { url_ += "{{ parameter.Name }}=" + encodeURIComponent(item_ ? "" + item_.{{ parameter.GetDateTimeToString }} : "null") + "&"; });
{%    elsif parameter.IsObjectArray -%}
    {{ parameter.VariableName }} && {{ parameter.VariableName }}.forEach((item, index) => {
        for (let attr in item)
			if (item.hasOwnProperty(attr)) {
				url_ += "{{ parameter.Name }}[" + index + "]." + attr + "=" + encodeURIComponent("" + (item as any)[attr]) + "&";
			}
    });
{%    elsif parameter.IsDate -%}
    url_ += "{{ parameter.Name }}=" + encodeURIComponent({{ parameter.VariableName }} ? "" + formatDate({{ parameter.VariableName }}) : "{{ QueryNullValue }}") + "&";
{%    elsif parameter.IsDateTime -%}
    url_ += "{{ parameter.Name }}=" + encodeURIComponent({{ parameter.VariableName }} ? "" + {{ parameter.VariableName }}.{{ parameter.GetDateTimeToString }} : "{{ QueryNullValue }}") + "&";
{%    elsif parameter.IsArray -%}
    {{ parameter.VariableName }} && {{ parameter.VariableName }}.forEach(item => { url_ += "{{ parameter.Name }}=" + encodeURIComponent("" + item) + "&"; });
{%    elsif parameter.IsDictionary -%}
    {{ parameter.VariableName }} && Object.keys({{ parameter.VariableName }}).forEach(key => { url_ += encodeURIComponent(key) +"=" + encodeURIComponent("" + {{ parameter.VariableName }}[key]) + "&"; });
{%    else -%}
    url_ += "{{ parameter.Name }}=" + encodeURIComponent("" + {{ parameter.VariableName }}) + "&";
{%    endif -%}
{% endfor -%}
  url_ = url_.replace(/[?&]$/, "");