(function() {
  /**
   * The plans/pricing page.
   */
  angular.module('quayPages').config(['pages', function(pages) {
    pages.create('plans', 'plans.html', PlansCtrl, {
      'title': 'Plans and Pricing',
      'newLayout': true
    });
  }]);

  function PlansCtrl($scope, $location, UserService, PlanService, $routeParams) {
    // Monitor any user changes and place the current user into the scope.
    UserService.updateUserIn($scope);

    $('.plan-tabs a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
      $scope.$apply(function() {
        $location.search({'tab': e.target.getAttribute('data-target').substr(1)});
      });
    });

    $scope.signedIn = function() {
      $('#signinModal').modal('hide');
      PlanService.handleNotedPlan();
    };

    $scope.qeStartTrial = function(plan) {
      $scope.currentQEPlan = plan;
      $('#tectonicManagerDialog').modal('show');
    };

    $scope.buyNow = function(plan) {
      PlanService.notePlan(plan);
      if ($scope.user && !$scope.user.anonymous) {
        PlanService.handleNotedPlan();
      } else {
        $('#signinModal').modal({});
      }
    };

    // Load the list of plans.
    PlanService.getPlans(function(plans) {
      $scope.plans = plans;

      for (var i = 0; i < $scope.plans.length; ++i) {
        var plan = plans[i];
        if (plan.privateRepos > 20 && !plan.plans_page_hidden) {
          $scope.dropdownPlan = plan.stripeId;
          break
        }
      }

      if ($scope && $routeParams['trial-plan']) {
        $scope.buyNow($routeParams['trial-plan']);
      }

      if ($scope && $routeParams['tab'] == 'enterprise') {
        $('#enterpriseTab').tab('show')
      }
    }, /* include the personal plan */ true);
  }
})();