(function () {
    'use strict';

    var rulesUrl = "/api/rules/Get?packageName=:code";
    var quickQuotesUrl = "/api/quotes/v1/GetHomeQuote";
    //var referralsUrl = "/QuestionAnswer/DbQuoteReferrals/SetValues";
    var captchaEndPoint = "/api/quotes/CaptchaValidate";
    var mailEndPoint = "/api/MailToBroker/MailSend";
    var tokenURL = "/api/token/RequestToken";
    angular.module('labelApp').factory('homeService', ['$q', '$resource', '$window',
    function ($q, $resource, $window) {
        return {
            getRules: getRules,
            qualifiedQuotes: qualifiedQuotes,
            //saveReferrals:saveReferrals,
            clearState: clearState,
            retrieveState: retrieveState,
            storeState: storeState,
            generateUID: generateUID,
            validateCaptchaSer: validateCaptchaSer,
            mailSendService: mailSendService,
            getToken: getToken
        };

        function getRules(productName) {
            var rulesApi = $resource(rulesUrl, { code: productName }, { get: { method: 'GET', isArray: false } });
            return rulesApi.get().$promise;
        }

        function validateCaptchaSer(captchaValue, success) {
            var rulesApi = $resource(captchaEndPoint, { value: captchaValue }, { get: { method: 'GET', isArray: false } });
            return rulesApi.get().$promise;

        };
        function mailSendService(request, success, error) {
            
            var mailSend = $resource(mailEndPoint, {}, {
                save: {
                    method: 'POST',
                    isArray: false
                }
            });
            var resp = mailSend.save({}, request, function () {
                success(resp);
            }, error);
        };

        function generateUID() {
            var d = new Date().getTime();
            if (window.performance && typeof window.performance.now === "function") {
                d += performance.now(); //use high-precision timer if available
            }
            var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
                var r = (d + Math.random() * 16) % 16 | 0;
                d = Math.floor(d / 16);
                return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16);
            });
            return uuid;
        };
        //function saveReferrals(request, success, error) {
        //    var ReferralQuote = $resource(referralsUrl, {}, {
        //        save: {
        //            method: 'POST',
        //            isArray: false
        //        }
        //    });

        //    var resp = ReferralQuote.save({}, request, function () {
        //        success(resp);
        //    }, error);
        //};
        function qualifiedQuotes( request, success, error) {
            //var token = getToken();
            debugger
            var QuickQuote = $resource(quickQuotesUrl, {}, {
                save: {
                    method: 'POST',
                    isArray: false,
                    //headers: {
                    //    'Authorization': 'Bearer ' + token
                    //}
                }
            });
            var resp = QuickQuote.save({}, request, function () {
                success(resp);
            }, error);
        }
        function getToken() {
            var response = "";
            var TokenData = $resource(tokenURL, {}, {
                save: {
                    method: 'GET',
                    isArray: false,
                    async: true
                }
            });
        //    var request = { "username": "demounderwriter@xceedance.com", "password": "demounderwriter@xceedance.com" };
            var resp = TokenData.save({}, request, function () {
                success(resp);
            }, error);

        }


        function clearState() {
            $window.sessionStorage.clear();
        }

        function retrieveState() {
            if (!$window.sessionStorage.getItem('quote.state')) {
                return null;
            }
            return JSON.parse($window.sessionStorage.getItem('quote.state'));
        };

        function storeState(state) {
            $window.sessionStorage.setItem('quote.state', JSON.stringify(state));
        }
    }
    ]);
})();
(function () {
    'use strict';

    var rulesUrl = "/api/rules/Get?packageName=:code";
    var quickQuotesUrl = "/api/quotes/GetQuote";
    //var referralsUrl = "/QuestionAnswer/DbQuoteReferrals/SetValues";
    var captchaEndPoint = "/api/quotes/CaptchaValidate";
    var mailEndPoint = "/api/MailToBroker/MailSend";

    angular.module('labelApp').factory('LandlordService', ['$q', '$resource', '$window',
    function ($q, $resource, $window) {
        return {
            getRules: getRules,
            qualifiedQuotes: qualifiedQuotes,
            //saveReferrals:saveReferrals,
            clearState: clearState,
            retrieveState: retrieveState,
            storeState: storeState,
            generateUID: generateUID,
            validateCaptchaSer: validateCaptchaSer,
            mailSendService: mailSendService
        };

        function getRules(productName) {
            var rulesApi = $resource(rulesUrl, { code: productName }, { get: { method: 'GET', isArray: false } });
            return rulesApi.get().$promise;
        }

        function validateCaptchaSer(captchaValue, success) {
            var rulesApi = $resource(captchaEndPoint, { value: captchaValue }, { get: { method: 'GET', isArray: false } });
            return rulesApi.get().$promise;

        };
        function mailSendService(request, success, error) {
            var mailSend = $resource(mailEndPoint, {}, {
                save: {
                    method: 'POST',
                    isArray: false
                }
            });
            var resp = mailSend.save({}, request, function () {
                success(resp);
            }, error);
        };

        function generateUID() {
            var d = new Date().getTime();
            if (window.performance && typeof window.performance.now === "function") {
                d += performance.now(); //use high-precision timer if available
            }
            var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
                var r = (d + Math.random() * 16) % 16 | 0;
                d = Math.floor(d / 16);
                return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16);
            });
            return uuid;
        };
        //function saveReferrals(request, success, error) {
        //    var ReferralQuote = $resource(referralsUrl, {}, {
        //        save: {
        //            method: 'POST',
        //            isArray: false
        //        }
        //    });

        //    var resp = ReferralQuote.save({}, request, function () {
        //        success(resp);
        //    }, error);
        //};
        function qualifiedQuotes(request, success, error) {
            var QuickQuote = $resource(quickQuotesUrl, {}, {
                save: {
                    method: 'POST',
                    isArray: false
                }
            });
            var resp = QuickQuote.save({}, request, function () {
                success(resp);
            }, error);
        }


        function clearState() {
            $window.sessionStorage.clear();
        }

        function retrieveState() {
            if (!$window.sessionStorage.getItem('quote.state')) {
                return null;
            }
            return JSON.parse($window.sessionStorage.getItem('quote.state'));
        };

        function storeState(state) {
            $window.sessionStorage.setItem('quote.state', JSON.stringify(state));
        }
    }
    ]);
})();
'use strict';

angular.module('labelApp')

.factory('AuthenticationService',['TokenGenerator', '$http', '$rootScope', '$timeout',function (TokenGenerator, $http, $rootScope, $timeout) {
    var service = {};
        var tokenRecieved = localStorage.getItem("token");
        if (tokenRecieved == undefined || tokenRecieved == '') {
            TokenGenerator.encode();
        } else {
            var result = TokenGenerator.decode(tokenRecieved);
            if (!result)
                TokenGenerator.encode();
            else
                $http.defaults.headers.common['Authorization'] = 'bearer ' + tokenRecieved;
        }
        return service;
    }])

.factory('TokenGenerator', ['$http', function ($http) {
    return {
        encode: encode,
        decode: decode
    }
    function encode(input) {
            var output = '';
          $http.get('/api/token/RequestToken')
                    .success(function (response) {
                        $http.defaults.headers.common['Authorization'] = 'bearer ' + response.data.data.access_token;
                        localStorage.setItem("token", response.data.data.access_token);
                        output = response.data.data.access_token;
                    }).error(function (response) {
                       // console.log("error fetching url");
                    });

       
        
            
        }
   function decode(token) {
            var base64Url = token.split('.')[1];
            var base64 = base64Url.replace('-', '+').replace('_', '/');
            var decode = JSON.parse(window.atob(base64));
            var current_time = new Date().getTime() / 1000;
            //if (decode.exp > current_time) {
            //    return false;//expired
            //}
            return false;
        }
}]);
