import SDK = Jsm.Sdk;
import { BaseServiceContainer } from "jsm-sdk";
{{#if hasSubContainers}}
{{#each containers}}
{{#if isContainerFolder}}
import {{containerName}} from "{{importPath}}";
{{else}}
{{#if hasClients}}
{{#each clients}}
import {{className}} from "{{importPath}}";
{{/each}}
{{/if}}
{{/if}}
{{/each}}
{{/if}}




{{sdkContainerChildNames .}}

export default class {{containerName}} extends BaseServiceContainer<TClientName, TContainerName> {

  {{#if hasSubContainers}}
  protected containers: Partial<Record<TContainerName, SDK.IServiceContainer>> = {};
  {{/if}}
  {{#if hasClients}}
  protected clients: Partial<Record<TClientName, SDK.IClient>> = {};
  {{/if}}

  constructor(sdk: SDK.ISdk | SDK.IServiceContainer) {
    super(sdk, "{{apiBasePath}}");
  }

  {{#if hasSubContainers}}
  // Sub containers
  {{#each containers}}
  {{#if isContainerFolder}}
  get {{baseName}}() {
    if (!this.containers.{{baseName}})
      this.containers.{{baseName}} = new {{containerName}}(this);
    return this.containers.{{baseName}} as {{containerName}};
  }
  {{nl}}
  {{/if}}
  {{/each}}
  {{/if}}

  {{#if hasClients}}
  // Clients
  {{#each clients}}
  get {{alias}}() {
    if (!this.clients.{{alias}})
      this.clients.{{alias}} = new {{className}}(this);
    return this.clients.{{alias}} as {{className}};
  }
  {{nl}}
  {{/each}}
  {{/if}}

}
