(function() {
  /**
   * Page that displays details about an organization, such as its teams.
   */
  angular.module('quayPages').config(['pages', function(pages) {
    pages.create('org-view', 'org-view.html', OrgViewCtrl);
  }]);

  function OrgViewCtrl($rootScope, $scope, ApiService, $routeParams, CreateService) {
    var orgname = $routeParams.orgname;

    $scope.TEAM_PATTERN = TEAM_PATTERN;
    $rootScope.title = 'Loading...';

    $scope.teamRoles = [
        { 'id': 'member', 'title': 'Member', 'kind': 'default' },
        { 'id': 'creator', 'title': 'Creator', 'kind': 'success' },
        { 'id': 'admin', 'title': 'Admin', 'kind': 'primary' }
    ];

    $scope.setRole = function(role, teamname) {
      var previousRole = $scope.organization.teams[teamname].role;
      $scope.organization.teams[teamname].role = role;

      var params = {
        'orgname': orgname,
        'teamname': teamname
      };

      var data = $scope.organization.teams[teamname];

      ApiService.updateOrganizationTeam(data, params).then(function(resp) {
      }, function(resp) {
        $scope.organization.teams[teamname].role = previousRole;
        $scope.roleError = resp.data || '';
        $('#cannotChangeTeamModal').modal({});
      });
    };

    $scope.createTeam = function(teamname) {
      if (!teamname) {
        return;
      }

      if ($scope.organization.teams[teamname]) {
        $('#team-' + teamname).removeClass('highlight');
        setTimeout(function() {
          $('#team-' + teamname).addClass('highlight');
        }, 10);
        return;
      }

      CreateService.createOrganizationTeam(ApiService, orgname, teamname, function(created) {
        $scope.organization.teams[teamname] = created;
      });
    };

    $scope.askDeleteTeam = function(teamname) {
      $scope.currentDeleteTeam = teamname;
      $('#confirmdeleteModal').modal({});
    };

    $scope.deleteTeam = function() {
      $('#confirmdeleteModal').modal('hide');
      if (!$scope.currentDeleteTeam) { return; }

      var teamname = $scope.currentDeleteTeam;
      var params = {
        'orgname': orgname,
        'teamname': teamname
      };

      var errorHandler = ApiService.errorDisplay('Cannot delete team', function() {
        $scope.currentDeleteTeam = null;
      });

      ApiService.deleteOrganizationTeam(null, params).then(function() {
        delete $scope.organization.teams[teamname];
        $scope.currentDeleteTeam = null;
      }, errorHandler);
    };

    var loadOrganization = function() {
      $scope.orgResource = ApiService.getOrganizationAsResource({'orgname': orgname}).get(function(org) {
        $scope.organization = org;
        $rootScope.title = orgname;
        $rootScope.description = 'Viewing organization ' + orgname;

        $('.info-icon').popover({
          'trigger': 'hover',
          'html': true
        });
      });
    };

    // Load the organization.
    loadOrganization();
  }
})();