/* Minification failed. Returning unminified contents.
(1,7): run-time error CSS1030: Expected identifier, found 'factory('
(1,7): run-time error CSS1031: Expected selector, found 'factory('
(1,7): run-time error CSS1025: Expected comma or open brace, found 'factory('
(127,7): run-time error CSS1030: Expected identifier, found 'directive('
(127,7): run-time error CSS1031: Expected selector, found 'directive('
(127,7): run-time error CSS1025: Expected comma or open brace, found 'directive('
(134,2): run-time error CSS1019: Unexpected token, found ')'
(134,4): run-time error CSS1030: Expected identifier, found 'controller('
(134,4): run-time error CSS1019: Unexpected token, found 'controller('
(134,15): run-time error CSS1019: Unexpected token, found ''SignInController''
(134,33): run-time error CSS1019: Unexpected token, found ','
(134,36): run-time error CSS1030: Expected identifier, found ''$scope''
(134,36): run-time error CSS1033: Expected closing bracket, found ''$scope''
(134,46): run-time error CSS1031: Expected selector, found ''SharedService''
(239,2): run-time error CSS1019: Unexpected token, found ']'
(239,3): run-time error CSS1019: Unexpected token, found ')'
 */
sbApp.factory('AuthenticationService', ['$http', '$q', 'SharedService', function ($http, $q, SharedService) {
    var apiURL = SharedService.getApiUrl();
    var sAuthKey = "";
    return {
        login: function (username, password) {
            sAuthKey = SharedService.getApiToken();
            var def = $q.defer();
            var obj = { username: username, password: password };
            var encryptedText = com.str.encrypt(JSON.stringify(obj));
            $http({
                method: "POST",
                url: apiURL + "/v1/authentication/login",
                data: JSON.stringify(encryptedText),
                headers: {
                    "Accept": "application/json",
                    "Content-Type": "application/json",
                    "Authorization": sAuthKey
                }
            }).then(function (response) {
                def.resolve(response.data);
            }, function (error) {
                def.reject(error);
            });
            return def.promise;
        },
        forgotPassword: function (email) {
            sAuthKey = SharedService.getApiToken();
            var def = $q.defer();
            $http({
                method: "POST",
                url: apiURL + "/v1/authentication/forgot-password/" + email,
                headers: {
                    "Accept": "application/json",
                    "Content-Type": "application/json",
                    "Authorization": sAuthKey
                }
            }).then(function (response) {
                def.resolve(response.data);
            }, function (error) {
                def.reject(error);
            });
            return def.promise;
        },
        verifyToken: function (token) {
            sAuthKey = SharedService.getApiToken();
            var def = $q.defer();
            $http({
                method: "GET",
                url: apiURL + "/v1/authentication/verify-token/" + token,
                headers: {
                    "Accept": "application/json",
                    "Content-Type": "application/json",
                    "Authorization": sAuthKey
                }
            }).then(function (response) {
                def.resolve(response.data);
            }, function (error) {
                def.reject(error);
            });
            return def.promise;
        },
        changePassword: function (token, password) {
            sAuthKey = SharedService.getApiToken();
            var def = $q.defer();
            var obj= { token: token, password: password };
            var encryptedText = com.str.encrypt(JSON.stringify(obj));
            $http({
                method: "POST",
                url: apiURL + "/v1/authentication/change-password",
                data: JSON.stringify(encryptedText),
                headers: {
                    "Accept": "application/json",
                    "Content-Type": "application/json",
                    "Authorization": sAuthKey
                }
            }).then(function (response) {
                def.resolve(response.data);
            }, function (error) {
                def.reject(error);
            });
            return def.promise;
        },
        verifyEmail: function (token, password) {
            sAuthKey = SharedService.getApiToken();
            var def = $q.defer();
            var obj = { token: token, password: password };
            var encryptedText = com.str.encrypt(JSON.stringify(obj));
            $http({
                method: "POST",
                url: apiURL + "/v1/authentication/verify-email" ,
                data: JSON.stringify(encryptedText),
                headers: {
                    "Accept": "application/json",
                    "Content-Type": "application/json",
                    "Authorization": sAuthKey
                }
            }).then(function (response) {
                def.resolve(response.data);
            }, function (error) {
                def.reject(error);
            });
            return def.promise;
        },
        renewToken: function (token, userId) {
            sAuthKey = SharedService.getApiToken();
            var def = $q.defer();
            var obj = { token: token, userId: userId, unixTimeStamp: Math.floor(Date.now() / 1000)};
            var encryptedText = com.str.encrypt(JSON.stringify(obj));
            $http({
                method: "POST",
                url: apiURL + "/v1/authentication/renew-token",
                data: JSON.stringify(encryptedText),
                headers: {
                    "Accept": "application/json",
                    "Content-Type": "application/json",
                    "Authorization": sAuthKey
                }
            }).then(function (response) {
                def.resolve(response.data);
            }, function (error) {
                def.reject(error);
            });
            return def.promise;
        }
    };
}]);
sbApp.directive('signInContent', function () {
    return {
        restrict: 'E',
        scope: true,
        templateUrl: "/Scripts/SignIn/sign-in-view.html?v=" + getAppVersion(),
        controller: 'SignInController'
    };
}).controller('SignInController', ['$scope', 'SharedService', 'AuthenticationService', function ($scope, SharedService, AuthenticationService) {

    $scope.langObj = [];
    $scope.userSetting = null;
    $scope.info = { username: "", password: "", isRememberMe: false }
    $scope.errorMsg = "";
    this.$onInit = function () {
        $scope.langObj = SharedService.getLanguage();
        var username = localStorage.getItem('sb-un');
        var password = localStorage.getItem('sb-up');

        if (username != null && password != null) {
            $scope.info.username = com.str.decrypt(username);
            $scope.info.password = com.str.decrypt(password);
            $scope.info.isRememberMe = true;
        }
    }

    $scope.textBox = {
        username: {
            placeholder: 'Enter your username',
            bindingOptions: {
                value: 'info.username'
            },
        },
        password: {
            placeholder: 'Enter your password',
            mode: 'password',
            bindingOptions: {
                value: 'info.password'
            },
        }
    }

    $scope.btn = {
        submit: {
            icon: 'bx bxs-lock-open',
            type: 'default',
            text: "Sign in",
            onClick: function (e) {
                var form = DevExpress.validationEngine.validateGroup($("#SignInForm").dxValidationGroup("instance"));
                if (form.isValid) {
                    $scope.errorMsg = "";
                    showLoading();
                    AuthenticationService.login($scope.info.username, $scope.info.password)
                        .then(function (data) {
                            if (data.code == HttpCode.success) {
                                var userInfo = JSON.parse(com.str.decrypt(data.result));
                                SharedService.setUserName(userInfo.Name);
                                SharedService.setUserRole(userInfo.UserRole);
                                SharedService.setUserId(userInfo.UserId);
                                SharedService.setModuleRights(userInfo.ModuleRights, userInfo.IsFullRight);
                                SharedService.setApiToken(userInfo.Token);
                                SharedService.setApiTokenExpiredDate(new Date().addMinutes(30));

                                if ($scope.info.isRememberMe) {
                                    localStorage.setItem('sb-un', com.str.encrypt($scope.info.username));
                                    localStorage.setItem('sb-up', com.str.encrypt($scope.info.password));
                                }
                                else {
                                    localStorage.removeItem('sb-un');
                                    localStorage.removeItem('sb-up');
                                }

                                var url = "/Authentication/SignOn";
                                var form = $('<form action="' + url + '" method="post">' +
                                    '<input type="text" name="encryptedText" value="' + data.result + '" />' +
                                    '</form>');
                                $('body').append(form);
                                form.submit();
                            }
                            else {
                                hideLoading();
                                localStorage.removeItem('sb-name');
                                localStorage.removeItem('sb-un');
                                localStorage.removeItem('sb-up');
                                $scope.errorMsg = "Username or password incorrect. Please try again.";
                            }
                        }, function (error) {
                            hideLoading();
                            showErrorMessage(error);
                        });
                }
            }
        }
    }

    $scope.checkBox = {
        rememberMe: {
            value: false,
            text: "Remember Me",
            bindingOptions: {
                value: 'info.isRememberMe'
            },
        }
    }

    $scope.validator = {
        required: {
            validationRules: [{
                type: "required",
                message: "This is required field."
            }]
        }
    };
}]);



