text: angular.module('upsConsole')
    .controller('HomeController', function( $q, $modal, $router, $rootScope, applicationsEndpoint, dashboardEndpoint, appModal, Notifications ) {
  
      var self = this;
  
      this.apps = [];
      this.topNotifications = [];
  
      this.canActivate = function() {
        this.currentPage = 1;
        return self.fetchNewPage(1)
          .then(function() {
            if (self.totalItems < 1) {
              $rootScope.$broadcast('upsNavigate', '/welcome');
              return false;
            }
          });
      };
  
      this.activate = function() {
        dashboardEndpoint.latestActiveApps()
          .then(function( data ) {
            self.topNotifications = data;
          });
      };
  
      this.pageChanged = function(page) {
        self.fetchNewPage(page);
      };
  
      this.fetchNewPage = function(page) {
        return applicationsEndpoint.fetch(page)
          .then(function( result ) {
            self.apps = result.apps;
            self.totalItems = result.totalItems;
          });
      };
  
      this.changeName = function(app) {
        var appClone = angular.extend({}, app);
        appModal.editName( appClone )
          .then(function( updatedApp ) {
            angular.extend( app, updatedApp );
            Notifications.success('The name of ' + app.name + ' application was successfully changed');
          })
          .catch(function( e ) {
            if ( e instanceof Error ) {
              Notifications.error('Failed to modify app ' + app.name + ': ' + e);
            }
          });
      };
  
      this.deleteApp = function(app) {
        $modal.open({
          templateUrl: 'dialogs/remove-app.html',
          controller: function( $modalInstance, $scope ) {
            $scope.app = app;
            $scope.confirm = function() {
              applicationsEndpoint.delete({appId: app.pushApplicationID})
                .then(function () {
                  $rootScope.$broadcast('upsApplicationDeleted');
                  return self.fetchNewPage(self.currentPage);
                })
                .then(function() {
                  $modalInstance.close();
                  if (self.totalItems < 1) {
                    $router.parent.navigate('/welcome');
                  }
                });
            };
            $scope.dismiss = function() {
              $modalInstance.dismiss('cancel');
            }
          }
        });
      };
  
    });
  