import Ember from 'ember';
import config from 'travis/config/environment';

export default Ember.Controller.extend({
  queryParams: ['org'],
  filter: null,
  org: null,

  filteredRepositories: function() {
    var filter, org, repos;
    filter = this.get('filter');
    repos = this.get('model');
    org = this.get('org');
    repos = repos.filter(function(item, index) {
      if (item.get('default_branch')) {
        return item.get('default_branch.last_build') !== null;
      }
    }).sortBy('default_branch.last_build.finished_at').reverse();
    if (org) {
      repos = repos.filter(function(item, index) {
        return item.get('owner.login') === org;
      });
    }
    if (Ember.isBlank(filter)) {
      return repos;
    } else {
      return repos.filter(function(item, index) {
        return item.slug.match(new RegExp(filter));
      });
    }
  }.property('filter', 'model', 'org'),

  updateFilter() {
    var value;
    value = this.get('_lastFilterValue');
    this.transitionToRoute({
      queryParams: {
        filter: value
      }
    });
    return this.set('filter', value);
  },

  selectedOrg: function() {
    return this.get('orgs').findBy('login', this.get('org'));
  }.property('org', 'orgs.[]'),

  orgs: function() {
    var apiEndpoint, orgs;
    orgs = Ember.ArrayProxy.create({
      content: [],
      isLoading: true
    });
    apiEndpoint = config.apiEndpoint;
    $.ajax(apiEndpoint + '/v3/orgs', {
      headers: {
        Authorization: 'token ' + this.auth.token()
      }
    }).then(function(response) {
      var array;
      array = response.organizations.map(function(org) {
        return Ember.Object.create(org);
      });
      orgs.set('content', array);
      return orgs.set('isLoading', false);
    });
    return orgs;
  }.property(),

  actions: {
    updateFilter(value) {
      this.set('_lastFilterValue', value);
      return Ember.run.throttle(this, this.updateFilter, [], 200, false);
    },

    selectOrg(org) {
      var login;
      login = org ? org.get('login') : null;
      return this.set('org', login);
    }
  }
});