import { ajax } from 'discourse/lib/ajax';
import { popupAjaxError } from 'discourse/lib/ajax-error';
import computed from 'ember-addons/ember-computed-decorators';

export default Ember.Controller.extend({
  pingDisabled: false,
  incomingEventIds: [],
  incomingCount: Ember.computed.alias("incomingEventIds.length"),

  @computed('incomingCount')
  hasIncoming(incomingCount) {
    return incomingCount > 0;
  },

  subscribe() {
    this.messageBus.subscribe(`/web_hook_events/${this.get('model.extras.web_hook_id')}`, data => {
      if (data.event_type === 'ping') {
        this.set('pingDisabled', false);
      }
      this._addIncoming(data.web_hook_event_id);
    });
  },

  unsubscribe() {
    this.messageBus.unsubscribe('/web_hook_events/*');
  },

  _addIncoming(eventId) {
    const incomingEventIds = this.get("incomingEventIds");

    if (incomingEventIds.indexOf(eventId) === -1) {
      incomingEventIds.pushObject(eventId);
    }
  },

  actions: {
    loadMore() {
      this.get('model').loadMore();
    },

    ping() {
      this.set('pingDisabled', true);

      ajax(`/admin/api/web_hooks/${this.get('model.extras.web_hook_id')}/ping`, {
        type: 'POST'
      }).catch(error => {
        this.set('pingDisabled', false);
        popupAjaxError(error);
      });
    },

    showInserted() {
      const webHookId = this.get('model.extras.web_hook_id');

      ajax(`/admin/api/web_hooks/${webHookId}/events/bulk`, {
        type: 'GET',
        data: { ids: this.get('incomingEventIds') }
      }).then(data => {
        const objects = data.map(event => this.store.createRecord('web-hook-event', event));
        this.get("model").unshiftObjects(objects);
        this.set("incomingEventIds", []);
      });
    }
  }
});