﻿"use strict";

// change password controller
app.controller("resetPasswordController", ["$scope", "$rootScope", "$location", "authService", "judgeRulesService", "localStorageService", "ngAuthSettings", 
    function ($scope, $rootScope, $location, authService, judgeRulesService, localStorageService, ngAuthSettings) {
        $scope.validNewPassword = false;
        $scope.validRepeatNewPassword = false;
        $scope.validateEmailAddress = false;

        $scope.validNewPasswordMinEightCharacters = false;
        $scope.validNewPasswordOneSpecialCharacter = false;
        $scope.validNewPasswordOneNumber = false;
        $scope.validNewPasswordOneLetter = false;

        $scope.revalidateEmail = function () {
            if ($scope.emailAddress) {
                var re = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
                if (re.test($scope.emailAddress)) {
                    $scope.validateEmailAddress = true;
                } else {
                    $scope.validateEmailAddress = false;
                }
            }
        }

        $scope.$watch("emailAddress", $scope.revalidateEmail);

        $scope.revalidatePassword = function () {
            if ($scope.newPassword) {
                var match = $scope.newPassword.match(/^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&-_])[A-Za-z\d$@$!%*#?&-_]{8,32}$/);
                $scope.validNewPassword = (match !== null && match !== void 0) && match.length > 0;
                $scope.validRepeatNewPassword = $scope.newPassword === $scope.repeatNewPassword;

                var matchMinEightCharacters = $scope.newPassword.match(/[A-Za-z\d$@$!%*#?&-_]{8,32}/);
                $scope.validNewPasswordMinEightCharacters = (matchMinEightCharacters !== null && matchMinEightCharacters !== void 0) && matchMinEightCharacters.length > 0;

                var matchOneSpecialCharacter = $scope.newPassword.match(/(?=.*[$@$!%*#?&-_])/);
                $scope.validNewPasswordOneSpecialCharacter = (matchOneSpecialCharacter !== null && matchOneSpecialCharacter !== void 0) && matchOneSpecialCharacter.length > 0;

                var matchOneNumber = $scope.newPassword.match(/(?=.*\d)/);
                $scope.validNewPasswordOneNumber = (matchOneNumber !== null && matchOneNumber !== void 0) && matchOneNumber.length > 0;

                var matchOneLetter = $scope.newPassword.match(/(?=.*[A-Za-z])/);
                $scope.validNewPasswordOneLetter = (matchOneLetter !== null && matchOneLetter !== void 0) && matchOneLetter.length > 0;
            }
        };
        $scope.$watch("newPassword", $scope.revalidatePassword);
        $scope.$watch("repeatNewPassword", $scope.revalidatePassword);

        $scope.changePassword = function () {
            var token = $location.search().token;
            var encryptedContactId = $location.search().cid;
            authService.changePasswordByEncryptedContactId(encryptedContactId, $scope.newPassword, $scope.emailAddress, token).then(function (repsonse) {
                var updatedSuccessful = repsonse && repsonse.data;
                if (updatedSuccessful === "true") {

                    $scope.handleAutoLoginData = { email: $scope.emailAddress, password:$scope.newPassword };
                    $scope.emailAddress = "";
                    $scope.newPassword = "";
                    $scope.repeatNewPassword = "";
                    $scope.alertMessage = "";


                    if ($location.hash() != "onboard") {
                        $.awards.alert({
                            title: "Message",
                            message: "Success. Please Log in.",
                            buttonCssClass: "btn btn-info",
                            headerCssClass: "bg-info",
                            okText: "OK"
                        });
                        $location.path("/");
                    } else {
                        $scope.handleAutoLogin($scope.handleAutoLoginData.email, $scope.handleAutoLoginData.password);
                    }
                }
                else {
                    $.awards.alert({
                        title: "Error",
                        message: "Failed to save password. Please try again or contact support.",
                        okText: "OK"
                    });
                }
            }, function () {
                $.awards.alert({
                    title: "Error",
                    message: "Failed to save password. Please try again or contact support.",
                    okText: "OK"
                });
            });
        };
        $scope.requestAgain = function () {
            $location.path("/forgotPassword");
        };
        $scope.init = function () {
            var token = $location.search().token;
            var encryptedContactId = $location.search().cid;
            authService.checkExpiredRequest(token, encryptedContactId).then(function (response) {
                var validRequest = response.data == "true";

                if (validRequest) {
                    $scope.validUrl = true;
                    $scope.alertMessage = "";
                }
                else {
                    $scope.validUrl = false;
                }
            }, function (error) {
                $scope.alertMessage = "This is not valid";
            });
        };

        $scope.handleAutoLogin = function (email, password) {
            var loginData = { userName: email, password: password, useRefreshTokens: true };

            loginData.userName = loginData.userName.trim();
            loginData.password = loginData.password.trim();

            authService.login(loginData).then(function (response) {
                $rootScope.firstLogin = true;

                var authData = localStorageService.get(ngAuthSettings.authDataKey);
                $location.path("/");
            },
                function (err) {
                    $scope.loginClicked = false;


                    if (err.error === "invalid_grant" || err.error === "grant_expired") {
                        $scope.message = err.error_description || errorMsg;
                    }
                    else {
                        $scope.message = err.error_description;
                    }
                });
        };
        $scope.init();
    }]);
