{{/*

  Render the request part of a single HTTP API operation, given:

  * `parameters`: OpenAPI/Swagger data specifying the parameters
  * `path`: the path where this definition was found, to enable us to resolve "$ref"

  This template renders:
  * the "simple parameters" (header, path, query parameters)
  * body parameters, which may be more complex, containing nested objects
  * response body examples

*/}}

{{ $parameters := .parameters }}
{{ $path := .path }}

<h2>Request</h2>

{{ if $parameters }}

    {{ $simple_parameters := where $parameters "in" "!=" "body"}}
    {{ if $simple_parameters }}
<h3>Request parameters</h3>

        {{ partial "openapi/render-parameters" (dict "parameters" $simple_parameters "type" "header" "caption" "header parameters") }}
        {{ partial "openapi/render-parameters" (dict "parameters" $simple_parameters "type" "path" "caption" "path parameters") }}
        {{ partial "openapi/render-parameters" (dict "parameters" $simple_parameters "type" "query" "caption" "query parameters") }}

    {{ end }}

    {{ $body_parameters := where $parameters "in" "body"}}
    {{ if $body_parameters }}
<h3>Request body</h3>

        {{/* at most one body param is allowed by the spec */}}
        {{ $body_parameter := index $body_parameters 0 }}
        {{ $schema := partial "json-schema/resolve-refs" (dict "schema" $body_parameter.schema "path" $path) }}
        {{ $schema := partial "json-schema/resolve-allof" $schema }}

        {{ $additional_types := partial "json-schema/resolve-additional-types" $schema }}
        {{ $additional_types = uniq $additional_types }}
        {{ range $additional_types }}
            {{ partial "openapi/render-object-table" (dict "caption" .title "properties" .properties "required" .required) }}
        {{ end }}

<h3>Request body example</h3>

        {{ $example := partial "json-schema/resolve-example" $schema }}
        {{ $example_json := jsonify (dict "indent" "  ") $example }}
        {{ $example_json = replace $example_json "\\u003c" "<" }}
        {{ $example_json = replace $example_json "\\u003e" ">" | safeHTML }}

```json
{{ $example_json }}
```
    {{ end }}

{{ else }}
<p>No request parameters or request body.</p>
{{ end }}
