export default Ember.Controller.extend({
  needs: ['modal'],

  modelChanged: function(){

    var grouping = Em.Object.extend({});

    var model = this.get('model');
    var copy = Em.A();

    if(model){
      model.forEach(function(o){
        copy.pushObject(grouping.create(o));
      });
    }

    this.set('workingCopy', copy);
  }.observes('model'),

  moveItem: function(item, delta){
    var copy = this.get('workingCopy');
    var index = copy.indexOf(item);
    if (index + delta < 0 || index + delta >= copy.length){
      return;
    }

    copy.removeAt(index);
    copy.insertAt(index+delta, item);
  },

  actions: {
    up: function(item){
      this.moveItem(item, -1);
    },
    down: function(item){
      this.moveItem(item, 1);
    },
    "delete": function(item){
      this.get('workingCopy').removeObject(item);
    },
    cancel: function(){
      this.set('model', null);
      this.set('workingCopy', null);
      this.send('closeModal');
    },
    edit: function(item){
      item.set("editing", true);
    },
    save: function(item){
      item.set("editing", false);
    },
    add: function(){
      var obj = Em.Object.create({editing: true, name: "Enter Name"});
      this.get('workingCopy').pushObject(obj);
    },
    saveAll: function(){
      var self = this;
      var items = this.get('workingCopy');
      var groupIds = items.map(function(i){return i.get("id") || -1});
      var names = items.map(function(i){return i.get("name")});

      Discourse.ajax('/admin/badges/badge_groupings',{
        data: {ids: groupIds, names: names},
        method: 'POST'
      }).then(function(data){
        items = self.get("model");
        items.clear();
        data.badge_groupings.forEach(function(g){
          items.pushObject(Em.Object.create(g));
        });
        self.set('model', null);
        self.set('workingCopy', null);
        self.send('closeModal');
      },function(){
        // TODO we can do better
        bootbox.alert("Something went wrong");
      });
    }
  }
});