angular
	.module('dating.directives.signInForm', [])
	.controller(
		'SignInFormCtrl',
		function ($scope, $state, $location, UsersModel, globalParamsService, authService, userAccess, $rootScope) {
			var signInCtrl = this;
			var GLOBALS = globalParamsService.GLOBALS;
			signInCtrl.imagesUrl = GLOBALS.baseUrl + '/styles/images/';
			signInCtrl.showPassword = false;
			signInCtrl.toggleShowPassword = function () {
				signInCtrl.showPassword = !signInCtrl.showPassword;
			};
			signInCtrl.signInUser = function () {
				signInCtrl.isSubmitButtonDisabled = true;
				if (!signInCtrl.user || !signInCtrl.user.username.trim()) {
					signInCtrl.errors = { username: ['Username cannot be blank.'] };
					signInCtrl.isSubmitButtonDisabled = false;
					return;
				}
				UsersModel.signIn(signInCtrl.user)
					.error(function (result) {
						signInCtrl.errors = result;
						signInCtrl.isSubmitButtonDisabled = false;
					})
					.then(function () {
						signInCtrl.errors = null;
						globalParamsService.fetchGlobalParams().then(function (res) {
							if (res.status === 200 && angular.isDefined(res.data)) {
								authService.currentUser = res.data.userInfo;
								authService.isAuthenticated = true;
								userAccess.initialize();
								$rootScope.$broadcast('userLoggedIn');
								$state.go('dating.pages.dashboard');
								$rootScope.$broadcast('overlay:hide', 'login');
								signInCtrl.isSubmitButtonDisabled = false;
							}
						});
					});
			};
		}
	)
	.directive('signInForm', function () {
		return {
			restrict: 'E',
			controller: 'SignInFormCtrl',
			controllerAs: 'signInFormCtrl',
			bindToController: true,
			scope: {},
			templateUrl: globalParams.templateUrls.directives.sign_in_form,
			link: function () {}
		};
	});
