import { Context, Middleware } from "koa";
import Router, { RouterContext } from "koa-router";

declare namespace API {
  {{#each operations}}
  {{#if requestDef}}
  {{{requestDef}}};
  {{/if}}
  {{#if responseDef}}
  {{{responseDef}}};
  {{/if}}
  {{/each}}

  type Context<StateT, CustomT = {}> = RouterContext<StateT, CustomT>;
}

declare class API {
  middlewares(operation: string): Array<Middleware>;
  bind(router: Router): API;
  {{#each operations}}
  {{name}}({{#if requestDef}}req: API.{{capitalize name}}Request, {{/if}}ctx: API.Context): {{#if responseDef}}Promise<API.{{capitalize name}}Response>{{else}}Promise<void>{{/if}};
  {{/each}}
}

export = API;