import Ember from 'ember';
const { service } = Ember.inject;
import { Ability } from 'ember-can';

export default Ability.extend({
  currentUser: service(),

  canTransfer: Ember.computed('currentUser.role_id', function() {
    switch(this.get('currentUser.role_id')) {
      case 'staff_admin':
      case 'provider_admin':
        return true;
      default:
        return false;
    }
  }),
  canUpdate: Ember.computed('currentUser.role_id', 'model.id', function() {
    switch(this.get('currentUser.role_id')) {
      case 'staff_admin':
      case 'provider_admin':
        return true;
      case 'client_admin':
        return this.get('currentUser.client_id') === this.get('model.id');
      default:
        return false;
    }
  }),
  canUpload: Ember.computed('currentUser.role_id', 'currentUser.client_id', 'model.otherParams.client-id', function() {
    switch(this.get('currentUser.role_id')) {
      case 'client_admin':
        return this.get('currentUser.client_id') === this.get('model.otherParams.client-id');
      default:
        return false;
    }
  }),
  canCreate: Ember.computed('currentUser.role_id', 'currentUser.client_id', 'model.otherParams.client-id', function() {
    switch(this.get('currentUser.role_id')) {
      case 'client_admin':
        return this.get('currentUser.client_id') === this.get('model.otherParams.client-id');
      default:
        return false;
    }
  }),
  canDelete: Ember.computed('currentUser.role_id', 'model.client.id', function() {
    switch(this.get('currentUser.role_id')) {
      case 'client_admin':
        return this.get('currentUser.client_id') === this.get('model.client.id');
      default:
        return false;
    }
  }),
  canModify: Ember.computed('currentUser.role_id', 'currentUser.client_id', 'model.client.id', function() {
    switch(this.get('currentUser.role_id')) {
      case 'client_admin':
        return this.get('currentUser.client_id') === this.get('model.client.id');
      default:
        return false;
    }
  }),
  canEdit: Ember.computed('currentUser.role_id', 'currentUser.client_id', 'model.client.id', function() {
    switch(this.get('currentUser.role_id')) {
      case 'client_admin':
        return this.get('currentUser.client_id') === this.get('model.client.id');
      default:
        return false;
    }
  }),
  canForm: Ember.computed('currentUser.role_id', 'currentUser.client_id', 'model.client.id', function() {
    switch(this.get('currentUser.role_id')) {
      case 'client_admin':
        return this.get('currentUser.client_id') === 'demo.datacite' && this.get('currentUser.client_id') === this.get('model.client.id');
      default:
        return false;
    }
  }),
  canRead: Ember.computed('currentUser.role_id', 'currentUser.provider_id', 'currentUser.client_id', 'model.client.id', 'model.provider.id', function() {
    switch(this.get('currentUser.role_id')) {
      case 'staff_admin':
        return true;
      case 'provider_admin':
        return this.get('currentUser.provider_id') === this.get('model.provider.id');
      case 'client_admin':
        return this.get('currentUser.client_id') === this.get('model.client.id');
      default:
        return false;
    }
  })
});

@@ -895,32 +895,79 @@
 er.role_id')) %7B%0A
+      case 'staff_admin':%0A        return true;%0A
       case 'clie
@@ -969,32 +969,32 @@
 'client_admin':%0A
-
         return t
@@ -1278,32 +1278,79 @@
 er.role_id')) %7B%0A
+      case 'staff_admin':%0A        return true;%0A
       case 'clie
@@ -1624,32 +1624,79 @@
 er.role_id')) %7B%0A
+      case 'staff_admin':%0A        return true;%0A
       case 'clie
@@ -1983,32 +1983,79 @@
 er.role_id')) %7B%0A
+      case 'staff_admin':%0A        return true;%0A
       case 'clie
@@ -2340,32 +2340,79 @@
 er.role_id')) %7B%0A
+      case 'staff_admin':%0A        return true;%0A
       case 'clie
@@ -2651,32 +2651,32 @@
 ', function() %7B%0A
-
     switch(this.
@@ -2697,32 +2697,79 @@
 er.role_id')) %7B%0A
+      case 'staff_admin':%0A        return true;%0A
       case 'clie

allow staff to manage DOIs. datacite/datacite#418