angular.module('splib_events', []).run(function($rootScope, $window, $location, $http) {
    $rootScope.$on('$locationChangeSuccess', function(event, newUrl, oldUrl) {
        var portal_id = $rootScope.portal_id;
        $http.get('/api/x_zoso_documentati/zoomin_rest_api/getuserdata?portal_id=' + portal_id).then(function(resp) {
            var response = resp.data.result;
            var userDomain = response.userEmail.split('@')[1];
            var version = response.snAppVersion;
            var clientName = response.clientName;
            var userCrgs = response.userCrgs;

            if (oldUrl.indexOf('zd_documentation') > -1) {
                var url_par = "labelkey=";
                var url_par_len = url_par.length;
                var old_index = oldUrl.indexOf(url_par);
                var new_index = newUrl.indexOf(url_par);


                var isSearchNewUrl = newUrl.indexOf('&q=') > -1;
                var isSearchOldUrl = oldUrl.indexOf('&q=') > -1;
                var isSearchBothUrl = newUrl.indexOf('&q=') > -1 && oldUrl.indexOf('&q=') > -1;
                var isFilterOldUrl = (oldUrl.indexOf('labelkey=') > -1) && (old_index + url_par_len < oldUrl.length);
                var isFilterNewUrl = (newUrl.indexOf('labelkey=') > -1) && (new_index + url_par_len < newUrl.length);
                var isFilterOnlyOldUrl = newUrl.indexOf('labelkey=') == -1 && oldUrl.indexOf('labelkey=') > -1;
                var isFilterBothUrl = false;

                var user_id = $window.NOW.user_id;

                var userType = false;
                var user_domain = "";
                if (user_id) {
                    userType = true;
                }

                if (!user_id) {
                    user_id = createUUID();
                }
                var filter_old = new URLSearchParams(oldUrl).get("labelkey");
                var filter_new = new URLSearchParams(newUrl).get("labelkey");

                if (isFilterNewUrl && !isFilterOldUrl) { //library: filter selected
                    filter_new = new URLSearchParams(newUrl).get("labelkey");
                    $rootScope.analyticsHandler({
                        "event": "SN_LIBRARY_FILTER_SELECTED",
                        "userCrgs": userCrgs,
                        "application": 'ServiceNow',
                        "snFilterLabel": filter_new,
                        "pageLanguageCode": $window.g_lang,
                        "userId": user_id,
                        "userLoggedIn": userType,
                        "userDomain": userDomain,
						"snAppVersion": version,
                        "clientName": clientName
                    });
                }

                if (isFilterNewUrl || isFilterOldUrl) { //library: filter changed
                    filter_old = new URLSearchParams(oldUrl).get("labelkey");
                    filter_new = new URLSearchParams(newUrl).get("labelkey");
                    if (filter_old !== filter_new) {
                       $rootScope.analyticsHandler({
                            "event": "SN_LIBRARY_FILTER_CHANGED",
                            "userCrgs": userCrgs,
                            "application": 'ServiceNow',
                            "snFilters": filter_new,
                            "userLoggedIn": userType,
                            "url": window.location.href,
                            "local_time": new Date().toLocaleString(),
                            "userId": user_id,
                            "snAppVersion": version,
                            "pageLanguageCode": $window.g_lang,
                            "authUserId": user_id,
                            "event_uuid": createUUID(),
                            "clientName": clientName,
                            "userDomain": userDomain
                        });
                    }
                }

                if (isFilterOldUrl && !isFilterOnlyOldUrl && filter_old.length > filter_new.length) { //library: filter removed
                    var url_dif = findDiff(filter_new, filter_old);
                    $rootScope.analyticsHandler({
                        "event": "SN_LIBRARY_FILTER_REMOVED",
                        "userCrgs": userCrgs,
                        "application": 'ServiceNow',
                        "snFilterLabel": url_dif,
                        "pageLanguageCode": $window.g_lang,
                        "userId": user_id,
                        "userLoggedIn": userType,
                        "userDomain": userDomain,
						"snAppVersion": version,
                        "clientName": clientName
                    });
                }

                //library: search performed
                if (isSearchNewUrl) {
                    var oldurlParams = "?id" + oldUrl.split("?id")[1];
                    if (newUrl.indexOf("zd_documentation") > -1) {
                        var urlPrams_ = new URLSearchParams(oldurlParams);
                        if (oldurlParams.indexOf('q=') > -1) {
                            var searchTerm_ = urlPrams_.get('q');
                        }
                        var queryString = window.location.search;
                        var urlParams = new URLSearchParams(queryString);
                        var searchTerm = urlParams.get('q');
                        if (searchTerm !== searchTerm_) {
                            $rootScope.analyticsHandler({
                                event: "SN_LIBRARY_SEARCH_PERFORMED",
                                userCrgs: userCrgs,
                                application: 'ServiceNow',
                                snSearchTerm: searchTerm,
                                pageLanguageCode: $window.g_lang,
                                userId: user_id,
                                userLoggedIn: userType,
                                snFilterLabel: filter_new,
                                userDomain: userDomain,
								snAppVersion: version,
                                clientName: clientName,
                            });
                        }
                    }
                }
            }
        });
    });

    function createUUID() {
        var s = [];
        var hexDigits = "0123456789abcdef";
        for (var i = 0; i < 32; i++) {
            s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
        }
        s[14] = "4";
        s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1);
        s[8] = s[13] = s[18] = s[23] = "-";
        return s.join("");
    }

    function findDiff(str1, str2) {
        var arr1 = str1.split(',');
        var arr2 = str2.split(',');
        var diff = "";
        for (var i = 0; i < arr2.length; i++) {
            if (arr1.indexOf(arr2[i]) === -1) {
                diff += arr2[i] + ",";
            }
        }
        return diff;
    }

});