import UserField from 'admin/models/user-field';
import { bufferedProperty } from 'discourse/mixins/buffered-content';
import { popupAjaxError } from 'discourse/lib/ajax-error';
import { propertyEqual } from 'discourse/lib/computed';

export default Ember.Component.extend(bufferedProperty('userField'), {
  editing: Ember.computed.empty('userField.id'),
  classNameBindings: [':user-field'],

  cantMoveUp: propertyEqual('userField', 'firstField'),
  cantMoveDown: propertyEqual('userField', 'lastField'),

  userFieldsDescription: function() {
    return I18n.t('admin.user_fields.description');
  }.property(),

  bufferedFieldType: function() {
    return UserField.fieldTypeById(this.get('buffered.field_type'));
  }.property('buffered.field_type'),

  _focusOnEdit: function() {
    if (this.get('editing')) {
      Ember.run.scheduleOnce('afterRender', this, '_focusName');
    }
  }.observes('editing').on('didInsertElement'),

  _focusName: function() {
    $('.user-field-name').select();
  },

  fieldName: function() {
    return UserField.fieldTypeById(this.get('userField.field_type')).get('name');
  }.property('userField.field_type'),

  flags: function() {
    const ret = [];
    if (this.get('userField.editable')) {
      ret.push(I18n.t('admin.user_fields.editable.enabled'));
    }
    if (this.get('userField.required')) {
      ret.push(I18n.t('admin.user_fields.required.enabled'));
    }
    if (this.get('userField.show_on_profile')) {
      ret.push(I18n.t('admin.user_fields.show_on_profile.enabled'));
    }
    if (this.get('userField.show_on_user_card')) {
      ret.push(I18n.t('admin.user_fields.show_on_user_card.enabled'));
    }

    return ret.join(', ');
  }.property('userField.editable', 'userField.required', 'userField.show_on_profile', 'userField.show_on_user_card'),

  actions: {
    save() {
      const self = this;
      const buffered = this.get('buffered');
      const attrs = buffered.getProperties('name',
                                           'description',
                                           'field_type',
                                           'editable',
                                           'required',
                                           'show_on_profile',
                                           'show_on_user_card',
                                           'options');

      this.get('userField').save(attrs).then(function() {
        self.set('editing', false);
        self.commitBuffer();
      }).catch(popupAjaxError);
    },

    moveUp() {
      this.sendAction('moveUpAction', this.get('userField'));
    },

    moveDown() {
      this.sendAction('moveDownAction', this.get('userField'));
    },

    edit() {
      this.set('editing', true);
    },

    destroy() {
      this.sendAction('destroyAction', this.get('userField'));
    },

    cancel() {
      const id = this.get('userField.id');
      if (Ember.isEmpty(id)) {
        this.sendAction('destroyAction', this.get('userField'));
      } else {
        this.rollbackBuffer();
        this.set('editing', false);
      }
    }
  }
});