/**
  A form to create an IP address that will be blocked or whitelisted.
  Example usage:

    {{screened-ip-address-form action="recordAdded"}}

  where action is a callback on the controller or route that will get called after
  the new record is successfully saved. It is called with the new ScreenedIpAddress record
  as an argument.
**/

import ScreenedIpAddress from 'admin/models/screened-ip-address';
import computed from 'ember-addons/ember-computed-decorators';
import { on } from 'ember-addons/ember-computed-decorators';

export default Ember.Component.extend({
  classNames: ['screened-ip-address-form'],
  formSubmitted: false,
  actionName: 'block',

  @computed
  adminWhitelistEnabled() {
    return Discourse.SiteSettings.use_admin_ip_whitelist;
  },

  @computed("adminWhitelistEnabled")
  actionNames(adminWhitelistEnabled) {
    if (adminWhitelistEnabled) {
      return [
        {id: 'block',       name: I18n.t('admin.logs.screened_ips.actions.block')},
        {id: 'do_nothing',  name: I18n.t('admin.logs.screened_ips.actions.do_nothing')},
        {id: 'allow_admin', name: I18n.t('admin.logs.screened_ips.actions.allow_admin')}
      ];
    } else {
      return [
        {id: 'block',       name: I18n.t('admin.logs.screened_ips.actions.block')},
        {id: 'do_nothing',  name: I18n.t('admin.logs.screened_ips.actions.do_nothing')}
      ];
    }
  },

  actions: {
    submit() {
      if (!this.get('formSubmitted')) {
        this.set('formSubmitted', true);
        const screenedIpAddress = ScreenedIpAddress.create({
          ip_address: this.get('ip_address'),
          action_name: this.get('actionName')
        });
        screenedIpAddress.save().then(result => {
          this.setProperties({ ip_address: '', formSubmitted: false });
          this.sendAction('action', ScreenedIpAddress.create(result.screened_ip_address));
          Ember.run.schedule('afterRender', () => this.$('.ip-address-input').focus());
        }).catch(e => {
          this.set('formSubmitted', false);
          const msg = (e.responseJSON && e.responseJSON.errors) ?
                      I18n.t("generic_error_with_reason", {error: e.responseJSON.errors.join('. ')}) :
                      I18n.t("generic_error");
          bootbox.alert(msg, () => this.$('.ip-address-input').focus());
        });
      }
    }
  },

  @on("didInsertElement")
  _init() {
    Ember.run.schedule('afterRender', () => {
      this.$('.ip-address-input').keydown(e => {
        if (e.keyCode === 13) {
          this.send('submit');
        }
      });
    });
  }
});
