(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, {
      'newLayout': true,
      'title': 'Organization {{ organization.name }}',
      'description': 'Organization {{ organization.name }}'
    })
  }]);

  function OrgViewCtrl($scope, $routeParams, $timeout, ApiService, UIService, AvatarService) {
    var orgname = $routeParams.orgname;

    $scope.showLogsCounter = 0;
    $scope.showApplicationsCounter = 0;
    $scope.showInvoicesCounter = 0;
    $scope.showRobotsCounter = 0;
    $scope.showTeamsCounter = 0;

    $scope.orgScope = {
      'changingOrganization': false,
      'organizationEmail': ''
    };

    $scope.$watch('orgScope.organizationEmail', function(e) {
      UIService.hidePopover('#changeEmailForm input');
    });

    var loadRepositories = function() {
      var options = {
        'namespace': orgname,
      };

      $scope.repositoriesResource = ApiService.listReposAsResource().withOptions(options).get(function(resp) {
        return resp.repositories;
      });
    };

    var loadOrganization = function() {
      $scope.orgResource = ApiService.getOrganizationAsResource({'orgname': orgname}).get(function(org) {
        $scope.organization = org;
        $scope.orgScope.organizationEmail = org.email;
        $scope.isAdmin = org.is_admin;
        $scope.isMember = org.is_member;

        // Load the repositories.
        $timeout(function() {
          loadRepositories();
        }, 10);
      });
    };

    // Load the organization.
    loadOrganization();

    $scope.showRobots = function() {
      $scope.showRobotsCounter++;
    };

    $scope.showTeams = function() {
      $scope.showTeamsCounter++;
    };

    $scope.showInvoices = function() {
      $scope.showInvoicesCounter++;
    };

    $scope.showApplications = function() {
      $scope.showApplicationsCounter++;
    };

    $scope.showLogs = function() {
      $scope.showLogsCounter++;
    };

    $scope.changeEmail = function() {
      UIService.hidePopover('#changeEmailForm input');

      $scope.orgScope.changingOrganization = true;
      var params = {
        'orgname': orgname
      };

      var data = {
        'email': $scope.orgScope.organizationEmail
      };

      ApiService.changeOrganizationDetails(data, params).then(function(org) {
        $scope.orgScope.changingOrganization = false;
        $scope.organization = org;
      }, function(result) {
        $scope.orgScope.changingOrganization = false;
        UIService.showFormError('#changeEmailForm input', result, 'right');
      });
    };
  }
})();