/**
 * An element which displays a box for the user to sign in, sign up and recover their account.
 */
angular.module('quay').directive('userSetup', function () {
  var directiveDefinitionObject = {
    priority: 0,
    templateUrl: '/static/directives/user-setup.html',
    replace: false,
    transclude: true,
    restrict: 'C',
    scope: {
      'redirectUrl': '=redirectUrl',

      'inviteCode': '=inviteCode',

      'signInStarted': '&signInStarted',
      'signedIn': '&signedIn',
      'userRegistered': '&userRegistered'
    },
    controller: function($scope, $location, $timeout, ApiService, KeyService, UserService, Config, Features) {
      $scope.Config = Config;
      $scope.Features = Features;

      $scope.sendRecovery = function() {
        $scope.sendingRecovery = true;

        ApiService.requestRecoveryEmail($scope.recovery).then(function() {
          $scope.invalidRecovery = false;
          $scope.errorMessage = '';
          $scope.sent = true;
          $scope.sendingRecovery = false;
        }, function(resp) {
          $scope.invalidRecovery = true;
          $scope.errorMessage = ApiService.getErrorMessage(resp, 'Cannot send recovery email');
          $scope.sent = false;
          $scope.sendingRecovery = false;
        });
      };

      $scope.handleUserRegistered = function(username) {
        $scope.userRegistered({'username': username});
      };

      $scope.hasSignedIn = function() {
        return UserService.hasEverLoggedIn() || Config.AUTHENTICATION_TYPE != 'Database';
      };
    }
  };
  return directiveDefinitionObject;
});
