// This is Generated Source.
{% for imp in imports %}
import {{imp.defaultMember}} from "{{imp.moduleName}}";
{% endfor %}

export default class {{name}} extends PathSegment {
    constructor(prv: PathSegment, id?: string, service?) {
        super("{{urlName}}", id{% if defaultValue %} || "{{defaultValue}}"{% endif %}, prv, service);
    }
    {% for seg in children %}

    /**
     * {{seg.valueDesc}}
     */
    {{seg.methodName}}(id?: string) {
        return new {{seg.name}}(this, id);
    }
    {% endfor %}
    {% for op in operations %}

    /**
     *  {{op.description}}
     */
    {{op.method}}({{op.paramsDeclar}}): Promise<{{op.responseType}}> {
        return this._send({
            body: {{op.bodyParamName}},
            ignoreId: {% if op.method == 'list' %}false{% else %}true{% endif %},
            method: "{{op.httpMethod}}",
            query: {{op.queryParamName}},
        }){% if op.responseType != 'any' and op.responseType != 'void' %}.then((res) => {
                return res.json();
        }){% endif %};
    }

    /**
     *  {{op.description}}
     *  return {ApiResponse}
     */
    {{op.method}}Raw({{op.paramsDeclar}}): Promise<any> {
        return this._send({
            body: {{op.bodyParamName}},
            ignoreId: {% if op.method == 'list' %}false{% else %}true{% endif %},
            method: "{{op.httpMethod}}",
            query: {{op.queryParamName}},
        });
    }
    {% endfor %}
}
{% for def in definitions %}

export interface {{def.name}} {
{% for fld in def.fields %}

    /**
     * {{fld.comment}}
     */
    {{ fld.name }}?: {{fld.type}};
{% endfor %}
}
{% endfor %}
{% for e in enumTypes %}

export type {{e.name}} = {{e.types | join(" | ") }};
{% endfor %}
