using namespace {{dtoNamespace}};

{{#each endpoints as |e|}}
class {{e.name}} {
public:

	{{#each e.parameters as |param|}}

	/**
	 * @brief {{param.description}}
	
	 */

	{{#if param.required}}
	const {{param.type.typeNameWithQualifiers}} &{{param.type.name}}() const;
	void set{{param.type.writeName}}({{param.type.typeNameWithQualifiers}} new{{param.type.writeName}});

	{{else}}
	const {{param.type.typeName}} &{{param.type.name}}() const;
	void set{{param.type.writeName}}({{param.type.typeName}} new{{param.type.writeName}});
	bool {{param.type.name}}Null() const;
	void set{{param.type.writeName}}Null();
	
	{{/if}}

	{{/each}}

private:
	// Required path parameters

	{{#each e.requiredPathParameters as |param|}}
	{{param.type.typeNameWithQualifiers}} {{param.type.memberName}};

	{{/each}}
	
	// Required query parameters

	{{#each e.requiredQueryParameters as |param|}}
	{{param.type.typeNameWithQualifiers}} {{param.type.memberName}};

	{{/each}}

	// Optional query parameters

	{{#each e.optionalQueryParameters as |param|}}
{{#if param.type.defaultInitializer.length > 0}}
	{{param.type.typeNameWithQualifiers}} {{param.type.memberName}} = {{param.type.defaultInitializer}};
{{else}}
	{{param.type.typeNameWithQualifiers}} {{param.type.memberName}};
{{/if}}

{{/each}}

{{#if e.bodyParameters.length > 0}}
	// Body parameters

	{{#if e.bodyParameters.length == 1}}
	{{e.bodyParameters[0].type.typeNameWithQualifiers}} m_body;

	{{else}}
	//FIXME: Multiple body options not implemented.

	{{/if}}
{{/if}}

};


{{/each}}
