app.service('$task', function($http, blockUI, inform, $route) {
  this.toggleState = function(task) {
    blockUI.start('A executar...');
    $http.post('./api/task/toggle/' + task._id)
    .then(function(response) {
      $route.reload();
		})
    .catch(function(response) {
      inform.add('Ocorreu um erro ao alternar o estado da tarefa. Erro: ' + response.data, {ttl: 2000, type: 'danger'});
    })
    .finally(function() {
      blockUI.stop();
    });
  };

  this.run = function(task) {
    blockUI.start('A executar...');
    $http.post('./api/task/run/' + task._id)
    .then(function(response) {
      inform.add("A tarefa irá começar em breve", {ttl: 2000, type: 'info'});
      $route.reload();
    })
    .catch(function(response) {
      inform.add('Ocorreu um erro ao iniciar a tarefa manualmente. Erro: ' + response.data, {ttl: 2000, type: 'danger'});
		})
    .finally(function() {
      blockUI.stop();
    });
  };

  this.getTypes = function(callback) {
    blockUI.start('A obter dados...');
    $http.get('./api/task/types')
    .then(function(response) {
      callback(response.data);
    })
    .catch(function(response) {
      inform.add('Não foi possível atualizar a lista de tarefas neste momento. Tente novamente. Erro: ' + response.data, {ttl: 2000, type: 'danger'});
      callback([]);
    })
    .finally(function() {
      blockUI.stop();
    });
  };
});
