angular.module("sn.$sp").factory('redirectionService', ['$location', '$q', '$window', function($location, $q, $window) {

    var _getLandingPage = function(path) {
        var _defered = $q.defer();
        try {

            var gAjax = new GlideAjax("global.PartnerPortalInitializationAjax").setScope("x_snc_portal_comm");
            gAjax.addParam("sysparm_path", path);
            gAjax.addParam("sysparm_name", 'getLandingPage');
            gAjax.getXMLAnswer(function(answer) {
                var response = JSON.parse(answer);
                _defered.resolve(response);
            });
        } catch (e) {
            console.error(e);
            _defered.reject();
        }
        return _defered.promise;

    };
    var getNextPage = function() {
        var path = $location.absUrl(); //window.top.location.href;
        var promise = _getLandingPage(path);
        return promise;

    }
    var gotoNextPage = function() {
        getNextPage().then(function(response) {
            if ((typeof response.forceLoadHomePage == 'string' && response.forceLoadHomePage == 'true') ||
                (typeof response.forceLoadHomePage == 'boolean' && response.forceLoadHomePage)) {
                $location.path($window.location.origin + "/" + NOW.portal_url_suffix);
                return;
            }
            // used replace to remove the middle page (from which it is redirected) from the browser history.
            if ((typeof response.needRedirect == 'string' && response.needRedirect == 'true') ||
                (typeof response.needRedirect == 'boolean' && response.needRedirect)) {
                var url = new URL($window.location.origin + "/" + response.redirectTo);
                if (url.searchParams.has("id"))
                    url.searchParams.append("spa", "1");
                $location.url(url.pathname + url.search);
                return;
            }
        })
    }
    var getNextPageParamsForExpand = function(pageId, associateId) {
        var _defered = $q.defer();
        try {
            var gAjax = new GlideAjax("global.PPExpandPartnershipAjaxUtils").setScope("x_snc_portal_comm");
            gAjax.addParam("sysparm_page", pageId.toString());
            gAjax.addParam("sysparm_name", 'getNextPageParamsForExpand');
			gAjax.addParam("sysparm_associate_id", associateId);
            gAjax.getXMLAnswer(function(answer) {
                var response = JSON.parse(answer);
                _defered.resolve(response);
            });
        } catch (e) {
            console.error(e);
            _defered.reject();
        }
        return _defered.promise;
    }
    return {
		_getLandingPage: _getLandingPage,
        getNextPage: getNextPage,
        gotoNextPage: gotoNextPage,
        getNextPageParamsForExpand: getNextPageParamsForExpand
    };
}]);