// @flow

export default class {{{baseName}}}Events {
  _bridge: Object;

  constructor(bridge: Object) {
    this._bridge = bridge;
  }
{{#operations}}
{{#operation}}
{{#isEvent}}

  add{{{camelizedNickName}}}EventListener(eventListener: Function): string {
    return this._bridge.registerEventListener(
      '{{package}}.event.{{operationId}}',
      eventListener,
    );
  }
{{/isEvent}}
{{/operation}}
{{/operations}}
{{#operations}}
{{#operation}}
{{#isEvent}}

  remove{{{camelizedNickName}}}EventListener(uuid: string): any {
    return this._bridge.removeEventListener(uuid);
  }
{{/isEvent}}
{{/operation}}
{{/operations}}
{{#operations}}
{{#operation}}
{{#isEvent}}

  emit{{camelizedNickName}}({{_argList}}): void {
{{^hasParams}}
    return this._bridge.emitEvent('{{package}}.event.{{operationId}}');
{{/hasParams}}
{{#hasSingleParam}}
{{#allParams}}
    return this._bridge.emitEvent('{{package}}.event.{{operationId}}', {
      data{{#required}}: {{paramName}}{{/required}}{{^required}}:opts{{/required}},
    });
{{/allParams}}
{{/hasSingleParam}}
{{^hasSingleParam}}
{{#hasParams}}
{{>_methodBody}}
    return this._bridge.emitEvent('{{package}}.event.{{operationId}}', {
      data,
    });
{{/hasParams}}
{{/hasSingleParam}}
  }
{{/isEvent}}
{{/operation}}
{{/operations}}
}
