import { bufferedProperty } from 'discourse/mixins/buffered-content';
import computed from 'ember-addons/ember-computed-decorators';
import { on, observes } from 'ember-addons/ember-computed-decorators';
import { popupAjaxError } from 'discourse/lib/ajax-error';

export default Ember.Component.extend(bufferedProperty('host'), {
  editToggled: false,
  tagName: 'tr',
  categoryId: null,

  editing: Ember.computed.or('host.isNew', 'editToggled'),

  @on('didInsertElement')
  @observes('editing')
  _focusOnInput() {
    Ember.run.schedule('afterRender', () => { this.$('.host-name').focus(); });
  },

  @computed('buffered.host', 'host.isSaving')
  cantSave(host, isSaving) {
    return isSaving || Ember.isEmpty(host);
  },

  actions: {
    edit() {
      this.set('categoryId', this.get('host.category.id'));
      this.set('editToggled', true);
    },

    save() {
      if (this.get('cantSave')) { return; }

      const props = this.get('buffered').getProperties('host', 'path_whitelist', 'class_name');
      props.category_id = this.get('categoryId');

      const host = this.get('host');

      host.save(props).then(() => {
        host.set('category', Discourse.Category.findById(this.get('categoryId')));
        this.set('editToggled', false);
      }).catch(popupAjaxError);
    },

    delete() {
      bootbox.confirm(I18n.t('admin.embedding.confirm_delete'), (result) => {
        if (result) {
          this.get('host').destroyRecord().then(() => {
            this.sendAction('deleteHost', this.get('host'));
          });
        }
      });
    },

    cancel() {
      const host = this.get('host');
      if (host.get('isNew')) {
        this.sendAction('deleteHost', host);
      } else {
        this.rollbackBuffer();
        this.set('editToggled', false);
      }
    }
  }
});