// huluHelpHeader
// globally define adobe object
let s = null;
// create dataprops object for adobe
let dataProps = {};

/*Start country/language*/
function setup() {
    //move code to local
    let response = verifySessionStorage();
    console.log('page-init: verify session response: ', response);
    if(response == 'create-session'){
        let index = document.URL.indexOf('.com');
        let baseURL = document.URL.substring(0, index + 4);
        let communityName = 'huluhelp';
        let communityNameVforce = 'huluhelpvforcesite';
        let serviceURL = SITE_DOMAIN + '/' + communityNameVforce;
        if(document.URL.indexOf(communityName) == -1) {
            communityName = "";
            communityNameVforce = "";
            serviceURL = baseURL;
        }
        // use IPService callout to get IP for use in Feedback form
        let calloutURI = serviceURL + '/services/apexrest/IPService?brand=Hulu';
        fetch(calloutURI, {
            method: "GET"
        })
        .then((response) => response.json())
            .then(repos => {
                console.log('page-init: NEW SESSION - set originalReferrer then reload page');

                if (!window.localStorage.getItem('LSKey[c]allowAdobe')) {
                    window.sessionStorage.setItem('LSKey[c]allowAdobe', 'allow');
                    window.localStorage.setItem('LSKey[c]allowAdobe', 'allow');
                }
               
                window.sessionStorage.setItem('LSKey[c]originalReferrer', document.referrer);
                setSession(repos);
                window.open(document.URL, "_self");
            })
            .catch(error => {
                console.error("page-init: error1:" + error);
            })
        .catch(error => {
            console.error("page-init: error2:" + error);
        });
    } else {

        if (response == 'local-exists') { 
            console.log('page-init: NEW SESSION - localStorage exists, so must be new tab - set originalReferrer');
            window.sessionStorage.setItem('LSKey[c]originalReferrer', document.referrer);

            if (!window.sessionStorage.getItem('LSKey[c]allowAdobe')) {
                window.sessionStorage.setItem('LSKey[c]allowAdobe', 'allow');
                window.localStorage.setItem('LSKey[c]allowAdobe', 'allow');
            }
        }
        
        initiateNice();
    }
}

//call setup
setup();
/*End country/language*/

/*Start Nice scripts*/
function initiateNice() {
    (function (i, s, o, r, g, v, a, m) {
        g = v ? g + '?v=' + v : g; i['BrandEmbassy'] = r;
        i[r] = i[r] || function () { (i[r].q = i[r].q || []).push(arguments) }; i[r].l = +new Date();
        a = s.createElement(o); m = s.getElementsByTagName(o)[0]; a.async = 1;
        a.src = g + '?' + Math.round(Date.now() / 1000 / 3600); m.parentNode.insertBefore(a, m)
    }) (window, document, 'script', 'brandembassy', BRAND_EMBASSY_JS);

    brandembassy('init', 3717, BRAND_EMBASSY_ID);

    brandembassy('setWindowWidth', '320px');
    brandembassy('setWindowHeight', '610px');
    brandembassy('setCustomCss', '[data-selector="Header"] {margin-bottom: 18px;}');
    brandembassy('setCustomCss', '[data-selector="MESSENGER"] {display: none;}');

    //hide the precontact survey form */
    brandembassy('hidePreSurvey');
    //brandembassy('openChatWindow');
    brandembassy('sendFirstMessageAutomatically', 'Hello');
    //brandembassy('autoStartSession');

    //Displays the chat window as if there are agents available*/
    brandembassy('enableChatAlwaysOnline');

    //SHOW SEND BUTTON*/
    brandembassy('showSendButton');
    //setBrandEmbassyFields();

    //sets default width to 400px
    document.onreadystatechange = (event) => {

        if (document.readyState === 'complete') {
            brandembassy('setWindowWidth', '400px');
        }
        showHideBot();
    };

    document.addEventListener('chatBotStatusChange', showHideBot);


    document.addEventListener('setnicefields', function (event) {
        setBrandEmbassyFields(event.detail);
    });

    brandembassy('onPushUpdate', ['CaseStatusChanged'], pushUpdatePayload => {

        if (typeof pushUpdatePayload === 'undefined' || typeof pushUpdatePayload.data === 'undefined') {
            return;
        }
        const { status } = pushUpdatePayload.data.case || {};

        if (typeof status === 'undefined') {
            return;
        }
        // When a previous case has been closed, this will set the custom fields again.

        if (status === 'closed') {
            setBrandEmbassyFields();
        }

    });
}


function isBotEnabled() {
    return true;
}

function showHideBot() {
    let documentURL = document.URL;

    let chatbotActive = window.sessionStorage.getItem("LSKey[c]isChatBotActive");
    if (chatbotActive == "true" &&(documentURL.indexOf('/contact-us') == -1 || (isActiveSession()))) {
        brandembassy('setCustomCss', '[data-selector="MESSENGER"] {display: initial};');
    } else {
        brandembassy('setCustomCss', '[data-selector="MESSENGER"] {display: none};');
    }

}

function setBrandEmbassyFields(details) {
    console.log("setBrandEmbassyFields():details = ", details);
    try {
        brandembassy('setCaseCustomField', 'brand', BRAND_HULU);
        brandembassy('setCaseCustomField', 'tier', TIER);
        if(details && !details.isguestuser)
        {
            console.log("Set Authenticated to TRUE");
            brandembassy('setCaseCustomField', 'authenticated', "true");
            brandembassy('setCaseCustomField', 'user_id', details.userid ? details.userid : "N/A");
        }
        else{
            //get chatdata from session
            let chatData = window.sessionStorage.getItem("LSKey[c]chatdata");
            console.log("chatData = " + chatData);
            if (chatData) {
                chatData = JSON.parse(chatData);
            }
            let authenticated = chatData && chatData.userId ? "true" : "false";
            let user_id = chatData && chatData.userId ? chatData.userId : "N/A";
            console.log("Set Authenticated to " + authenticated);
            brandembassy('setCaseCustomField', 'authenticated', authenticated);
            brandembassy('setCaseCustomField', 'user_id', user_id);
        }
        
        brandembassy('setCaseCustomField', 'country', "US");

        brandembassy('setCaseCustomField', 'language', "en-US");
        brandembassy('setCaseCustomField', 'locale', "en_US");
        brandembassy('setCaseCustomField', 'botlanguage', "en-US");

        //set the ipAddress and browser name
        let ipAddress = window.sessionStorage.getItem("LSKey[c]ip");
        brandembassy('setCaseCustomField', 'ipaddress',ipAddress);
        brandembassy('setCaseCustomField', 'browser', getBrowserName());

        let adobeId = getCookie('s_fid');
        //adobeId = adobeId?.toLowerCase();
        brandembassy('setCaseCustomField', 'adobeid', adobeId);

    } catch (error) {
        console.error("setBrandEmbassyFields:", error);
    }
}

/* This is in common
function isEmpty(value) {
    return (value == undefined || value == null || value == "");
}*/


document.addEventListener('startnicechat', function (event) {

    console.log("startnicechat: " + JSON.stringify(event.detail));
    if (isBotEnabled()) {
        brandembassy('hideChatWindow');
    }

    document.cookie = "LSKey-c$chatType=startChat; expires=0; path=/";

    var top = screen.height-660;//20px margin
    var left=screen.width-375;
    let options = "width=375,height=640,toolbar=no,scrollbars=no,resizable=no,titlebar=no,left=" + left + ",top=" + top;

    openWindowWithPost(LIVE_AGENT_URL,  'chatwindow', options, event.detail);

});

function openWindowWithPost(url, name, windowoption, detail)
{

/*
    console.log("openWindowWithPost: detail = " + JSON.stringify(detail));
    var form = {};

    form = addFormValues('product', BRAND_HULU, form);
    form = addFormValues('tier', TIER, form);

    form = addFormValues('language', detail.language, form);
    form = addFormValues('country', detail.country, form);

    form = addFormValues('contactId', detail.contactId, form);
    form = addFormValues('accountId', detail.accountId, form);

    form = addFormValues('category', detail.category, form);
    form = addFormValues('subCategory', detail.subCategory, form);
    form = addFormValues('comments', detail.comments, form);

    form = addFormValues('action', detail.action, form);
    form = addFormValues('switchButtonId', detail.switchButtonId, form);
    form = addFormValues('ameliaconvid', detail.ameliaconvid, form);

    form = addFormValues('authenticated', detail.authenticated, form);
    form = addFormValues('user_id', detail.user_id, form);
*/

    let contactId = detail.contactId ? detail.contactId : "";
    let accountId = detail.accountId ? detail.accountId : "";
    let ameliaconvid = detail.ameliaconvid ? detail.ameliaconvid : "";
    let authenticated = detail.authenticated ? detail.authenticated : false;
    let user_id = detail.user_id ? detail.user_id : "";

    //remove quotes
    let comments = detail.comments ? detail.comments.replaceAll("'", "").replaceAll('"', '') : "";
    comments = encodeURIComponent(comments);

    let chatUrl = LIVE_AGENT_URL + "?product=" + BRAND_HULU + "&tier=" + TIER + "&language=" + detail.language
        + "&country=" + detail.country + "&contactId=" + contactId + "&accountId=" + accountId
        + "&category=" + detail.category + "&subCategory=" + detail.subCategory + "&comments=" + comments
        + "&action=" + detail.action + "&switchButtonId=" + detail.switchButtonId + "&ameliaconvid=" + ameliaconvid
        + "&authenticated=" + authenticated + "&user_id=" + user_id;
    console.log("chatUrl = " + chatUrl);
    var windowVF = window.open(chatUrl, name, windowoption);

/*
    setTimeout(function() {
        windowVF.postMessage(form, "*");
    }, 2000);
*/

}

function addFormValues(name, value, form)
{
    form[name] = value;
    return form;
}

document.addEventListener('startnicebot', function () {

    // send adobe chat initiation event
    let chatDataProps = {}
    chatDataProps.prop5 = 'Contact Button';
    chatDataProps.evar5 = 'Contact Button';
    chatDataProps.prop6 = 'N/A';
    chatDataProps.evar6 = 'N/A';
    chatDataProps.prop7 = 'FAB';
    chatDataProps.evar35 = 'FAB';
    chatDataProps.event7 = 1;
    chatDataProps.pageName = dataProps.pageName;
    chatDataProps.prop13 = dataProps.prop13;
    chatDataProps.prop14 = dataProps.prop14;
    chatDataProps.prop39 = dataProps.prop39;
    chatDataProps.evar74 = dataProps.evar74;
    chatDataProps.prop27 = dataProps.prop27;
    chatDataProps.evar27 = dataProps.evar27;

    handleAdobeData(chatDataProps, 'event');

    brandembassy('setCustomCss', '[data-selector="MESSENGER"] {display: initial};');
    brandembassy('hidePreSurvey');
    brandembassy('openChatWindow');
    brandembassy('sendFirstMessageAutomatically', 'Hello');

    if (!isActiveSession()) {
        brandembassy('hideAssignedAgent');
        brandembassy('autoStartSession');
    }

});


window.addEventListener("message", receiveMessage, false);

function receiveMessage(event) {
    console.log("chat method in parent page");
    console.log("data received :" + event.data);
    try{
        var jsonObject = "";
        if (event && event.data && typeof event.data === "string") {
            if (event.data.startsWith("loadSalesForceLiveChat")) {
                const delimiter = "#sep#";
                const splitArray = event.data.split(delimiter);
                try {
                    jsonObject = JSON.parse(splitArray[1]);
                } catch (error) {
                    console.error("Error parsing JSON:", error);
                }



                //minimize the VA chat
                let country = window.sessionStorage.getItem("LSKey[c]country");
                let language = window.sessionStorage.getItem("LSKey[c]language");
                let product = BRAND_HULU;
                let tier = TIER;
                let authenticated = jsonObject.authenticated;
                let user_id = jsonObject.user_id;
                let chatData = window.sessionStorage.getItem("LSKey[c]chatdata");
                console.log("chatData = " + chatData);
                if (chatData) {
                    chatData = JSON.parse(chatData);
                }
                let details = {
                    "country" : country,
                    "language" : language,
                    "product" : product,
                    "tier" : tier,
                    "authenticated" : authenticated,
                    "user_id" : user_id,
                    "accountId" : chatData && chatData.accountId ? chatData.accountId : null,
                    "contactId" : chatData && chatData.contactId ? chatData.contactId : null,
                    "category" : "",
                    "subCategory" : "",
                    "comments" : "",
                    "action" : "EscalateChat",
                    "switchButtonId" : "1",
                    "ameliaconvid" : jsonObject.ameliaconvid,
                    "brand" : BRAND_HULU
                };
                console.log("details = " + details);
                //cookie is only how prechat can read it
                document.cookie = "LSKey-c$chatType=EscalateChat; expires=0; path=/";
                if (isBotEnabled()) {
                    brandembassy('hideChatWindow');
                }

                let w = 375;
                let h = 650;
                let l = window.innerWidth - w;
                let t = window.innerHeight - h;
                let options = "width=" + w + ",height=" + h + ",toolbar=no,scrollbars=no,resizable=no,titlebar=no,left=" + l + ",top=" + t;

                //window.open(LIVE_AGENT_URL + '?language=' + language + '&country=' + country + '&product=' + product + '&ameliaconvid=' + jsonObject.ameliaconvid + '&tier=' + tier + '&authenticated=' + authenticated + '&user_id=' + user_id, "chatwindow", options);
                openWindowWithPost(LIVE_AGENT_URL,  'chatwindow', options, details);
            }

            if (event.data.startsWith("setnicefields")) {

                try {
                    setBrandEmbassyFields();

                    brandembassy('hidePreSurvey');
                    brandembassy('sendFirstMessageAutomatically', 'Hello');
                    if (!isActiveSession()) {
                        brandembassy('hideAssignedAgent');
                        brandembassy('autoStartSession');
                    }

                } catch (error) {
                    console.error("Error parsing JSON:", error);
                }
            }

            if (event.data.startsWith("startnicebot")) {

                // send adobe chat initiation event
                let chatDataProps = {}
                chatDataProps.prop5 = 'Contact Button';
                chatDataProps.evar5 = 'Contact Button';
                chatDataProps.prop6 = 'N/A';
                chatDataProps.evar6 = 'N/A';
                chatDataProps.prop7 = 'FAB';
                chatDataProps.evar35 = 'FAB';
                chatDataProps.event7 = 1;
                chatDataProps.pageName = dataProps.pageName;
                chatDataProps.prop13 = dataProps.prop13;
                chatDataProps.prop14 = dataProps.prop14;
                chatDataProps.prop39 = dataProps.prop39;
                chatDataProps.evar74 = dataProps.evar74;
                chatDataProps.prop27 = dataProps.prop27;
                chatDataProps.evar27 = dataProps.evar27;
                
                handleAdobeData(chatDataProps, 'event');

                brandembassy('setCustomCss', '[data-selector="MESSENGER"] {display: initial};');
                brandembassy('hidePreSurvey');
                brandembassy('openChatWindow');
                brandembassy('sendFirstMessageAutomatically', 'Hello');

                if (!isActiveSession()) {
                    brandembassy('hideAssignedAgent');
                    brandembassy('autoStartSession');
                }
            }

            if (event.data.startsWith("{")) {

                let eventData = JSON.parse(event.data);
                if (eventData.event && eventData.event == 'play') {
                    console.log("adobe: vidyard video play event: " + eventData.event);

                    const eventProps = {
                        'event17': 1,
                        'prop13': dataProps.prop13,
                        'prop14': dataProps.prop14,
                        'prop39': dataProps.prop39,
                        'evar74': dataProps.evar74,
                        'prop27': dataProps.prop27,
                        'evar27': dataProps.evar27
                    };
                    handleAdobeData(eventProps, 'event');
                }
            }

        } //if event && event.data

    } catch(err) {
        console.error("Error in receiveMessage boradcast:", err);
    }
}

function isActiveSession() {
    //check for an active session
    let currentStatus = "";
    //let language = window.sessionStorage.getItem("LSKey[c]language");
    // add any checks if necessary
    //let storageKey = "-" + language + "___chat";
    let storageKey = "-" + "___chat";
    for (i = 0; i < localStorage.length; i++)   {

        if (localStorage.key(i).includes(storageKey)) {
            let sessionStatus = JSON.parse(localStorage.getItem(localStorage.key(i)));
            currentStatus = sessionStatus.session.status;
            break;
        }

    };
    return (currentStatus == "OPEN" || currentStatus == "ASSIGNING" || currentStatus == "CLOSED");
}


// BEGIN primary Salesforce events pageref and writemeta 
document.addEventListener('pagerefchange', function (event) {
    console.log("page-init: pagerefchange event start. (ref: unload - testing timing with unload event)");

    // check for first time ref for this session.  if first pageref, add unload listener.  if listener exists and pageref runs, remove listener
    //
    if (!window.sessionStorage.getItem('LSKey[c]firstPage')) {
        console.log('page-init: ADD beforeunload handler');
        window.addEventListener("beforeunload", beforeUnloadHandler, { once: true });
        window.sessionStorage.setItem('LSKey[c]firstPage','true');
    } else if (window.sessionStorage.getItem('LSKey[c]firstPage') == 'true'){
        console.log('page-init: REMOVE beforeunload handler');
        window.removeEventListener("beforeunload", beforeUnloadHandler, { once: true });
        window.sessionStorage.setItem('LSKey[c]firstPage','false');
    }

    let documentURL = document.URL;

    if (documentURL.indexOf('/article') == -1 || documentURL.indexOf('/category')) {
        let elements = document.querySelectorAll("[data-src='js']");
        if (elements) {
            elements.forEach(e => {
                e.remove();
            });
        }
    }

    console.log('page-init: pagerefchange: adobe: set analytics props');
    if (event.detail.isGuest == true) {
        // login status
        dataProps.prop39 = 'Unauthenticated';
        dataProps.evar74 = 'Unauthenticated';
    } else {
        // login status
        dataProps.prop39 = 'Authenticated';
        dataProps.evar74 = 'Authenticated';
    }

    //VXSS-436 - campaign tracking
    const searchParams = new URLSearchParams(window.location.search);
    if (searchParams.has('utm_campaign')) {
        dataProps.prop9 = searchParams.get('utm_campaign');
        dataProps.evar9 = searchParams.get('utm_campaign');
    }
    if (searchParams.has('utm_source')) {
        dataProps.prop23 = searchParams.get('utm_source');
        dataProps.evar23 = searchParams.get('utm_source');
    }
    if (searchParams.has('utm_medium')) {
        dataProps.prop24 = searchParams.get('utm_medium');
        dataProps.evar24 = searchParams.get('utm_medium');
    }
    if (searchParams.has('utm_content')) {
        dataProps.prop30 = searchParams.get('utm_content');
        dataProps.evar30 = searchParams.get('utm_content');
    }
    
    if (document.title == 'Error') {
        dataProps.pageName = '404 Error Page';
        dataProps.prop27 = '404 Error Page';
        dataProps.evar27 = '404 Error Page';
        dataProps.prop13 = document.title;
        dataProps.prop14 = '404 Error Page';
        handleAdobeData(dataProps, 'page');
    } else {
        if (document.URL.indexOf('/article') === -1 && document.URL.indexOf('/category') === -1) {
            // delay the check for the title tag and event send to allow time for SF JS to "settle"
            setTimeout(() => {
                dataProps.prop13 = document.title;
                // "Parent Page Title" - English version of title for non-article pages.  article version in writemetatags event
                if (document.URL.indexOf('/contact-us') !== -1) {
                    dataProps.pageName = 'Contact Us';
                    dataProps.prop27 = 'Contact Us';
                    dataProps.evar27 = 'Contact Us';
                    dataProps.prop14 = 'Contact Us';
                } else if (document.URL.indexOf('/global-search') !== -1) {
                    dataProps.pageName = 'Global Search';
                    dataProps.prop27 = 'Global Search';
                    dataProps.evar27 = 'Global Search';
                    dataProps.prop14 = 'Search Results';
                } else if (document.URL.endsWith('.com') !== -1 || document.URL.endsWith('.com/') !== -1) {
                    dataProps.pageName = 'Home';
                    dataProps.prop27 = 'Home';
                    dataProps.evar27 = 'Home';
                    dataProps.prop14 = 'Home';
                }
                console.log('page-init: pagerefchange: adobe: was not an article/cat page: ', dataProps);
                handleAdobeData(dataProps, 'page');
            }, 100);
        }
    }
        
});

// dynamically add metadata to article pages 
document.addEventListener('writemetatags', function (event) {
    console.log("page-init: Received writemetatags event.");
    console.log("title: " + event.detail.title);
    console.log("summary: " + event.detail.summary);
    console.log("page:" + event.detail.page);

    let elements = document.querySelectorAll("[data-src='js']");
    if (elements) {
        elements.forEach(e => {
            e.remove();
        });
    }

    if (event.detail.page == "category") {

        // adobe code needed for article page.  need to wait for this meta before firing
        dataProps.pageName = 'Help Topic';
        dataProps.prop27 = 'Help Topic';
        dataProps.evar27 = 'Help Topic';
        dataProps.prop13 = document.title;
        dataProps.prop14 = event.detail.topic;
        handleAdobeData(dataProps, 'page');

        var link = document.createElement('meta');
        link.setAttribute('name', 'og:url');
        link.content = document.URL;
        link.setAttribute("data-src", "js");
        document.getElementsByTagName('head')[0].appendChild(link);

        link = document.createElement('link');
        link.setAttribute('rel', 'canonical');
        link.href = document.URL;
        link.setAttribute("data-src", "js");
        document.getElementsByTagName('head')[0].appendChild(link);
    } else {

        // adobe code needed for article page.  need to wait for this meta before firing
        dataProps.pageName = 'Article Detail';
        dataProps.prop27 = 'Article Detail';
        dataProps.evar27 = 'Article Detail';
        dataProps.prop13 = document.title;
        dataProps.prop14 = event.detail.parenttitleenglish;
        //Article Updated Date: prop15
        dataProps.prop15 = event.detail.lastpublished;
        //Article Version: prop16
        dataProps.prop16 = event.detail.articleversionnumber;
        //salesforce URLname: prop28
        dataProps.prop28 = event.detail.urlname;
        // category
        dataProps.prop34 = event.detail.category;
        handleAdobeData(dataProps, 'page');

        var link = document.createElement('meta');
        link.setAttribute('name', 'og:title');
        link.content = event.detail.title;
        link.setAttribute("data-src", "js");
        document.getElementsByTagName('head')[0].appendChild(link);

        link = document.createElement('meta');
        link.setAttribute('name', 'og:description');
        link.content = event.detail.summary;
        link.setAttribute("data-src", "js");
        document.getElementsByTagName('head')[0].appendChild(link);

        link = document.createElement('meta');
        link.setAttribute('name', 'description');
        link.content = event.detail.summary;
        link.setAttribute("data-src", "js");
        document.getElementsByTagName('head')[0].appendChild(link);

        //<meta name="robots" content="noindex">
        if (event.detail.suppress) {
            link = document.createElement('meta');
            link.setAttribute('name', 'robots');
            link.content = "noindex";
            link.setAttribute("data-src", "js");
            document.getElementsByTagName('head')[0].appendChild(link);
        }

        link = document.createElement('link');
        link.setAttribute('rel', 'canonical');
        link.href = document.URL;
        link.setAttribute("data-src", "js");
        document.getElementsByTagName('head')[0].appendChild(link);
    }
});
// END SF events


// BEGIN OneTrust related code
function getOneTrustGroupValue(group) {

    let OptOutStatus = decodeURIComponent(document.cookie)
        .split("; ")
        .find((e) => e.startsWith("OptanonConsent"))
        ?.split("&")
        .find((e) => e.startsWith("groups"))
        .split("=")[1]
        .split(",")
        .find((e) => e.startsWith(group))
        ?.split(":");
    
    return OptOutStatus !== undefined && OptOutStatus.length > 0 ? OptOutStatus[1] : null;
}


function hasUserOptedOut() {
    
    let optOutValue = getOneTrustGroupValue("C0004"); // 4 is opt out flag
    
    console.log('page-init: onetrust: opt out value: ' + optOutValue);

    if (optOutValue === "1") {
        console.log('page-init: onetrust: User has opted in. load adobe library');
        window.sessionStorage.setItem('LSKey[c]allowAdobe', 'allow');
        window.localStorage.setItem('LSKey[c]allowAdobe', 'allow');
        console.log('page-init: onetrust: are dataProps set? ', dataProps);
        handleAdobeData(dataProps, 'onetrust');
    } else {
        console.log('page-init: onetrust: User has opted out. ');
        window.sessionStorage.setItem('LSKey[c]allowAdobe', 'reject');
        window.localStorage.setItem('LSKey[c]allowAdobe', 'reject');
        deleteAdobeCookies();
    }         
}

function OptanonWrapper() { 
    console.log('page-init: onetrust: Onetrust OptanonWrapper');

    OneTrust.OnConsentChanged(hasUserOptedOut);
}

document.addEventListener('privacychoice', function () {
    console.log("onetrust: Received one trust event.");
    OneTrust.ToggleInfoDisplay();
});
//END ONETRUST

//instantiate tracking object with report suite ID and set global params in object
function handleAdobeData(localDataProps, type) {
    
    if (window.sessionStorage.getItem('LSKey[c]allowAdobe') == 'allow' && !suppressAdobe()) {

        if (!isObjectEmpty(localDataProps) && ((type=='onetrust' && localDataProps.pageName !== undefined) || type=='page' || type=='event')) {

            let aaPromise = new Promise(function (resolve, reject) {
            
                if (s === null) {
                    let aascripttag = document.createElement('script');
                    aascripttag.async = false;
                    aascripttag.src = SITE_DOMAIN + '/sfsites/c/resource/Adobe_AppMeasurement_Hulu?s='+Date.now();
                    document.head.insertBefore(aascripttag, document.head.children[0]);
            
                    aascripttag.addEventListener('load', () => {
    
                        console.log('handleAdobeData: loaded. setting global props');
                        s = s_gi(SUITE_NAME);
                        //designate tracking server
                        s.trackingServer = TRACKING_SERVER;
                        
                        s.registerPostTrackCallback(function(){
                            // custom clear of dataProps
                            clearAdobeVars();
                            // native clear of s object
                            s.clearVars();
                            console.log('handleAdobeData: cleared data post s.t()');
                        });
                        
                        resolve();
                    });
                } else {
                    console.log('handleAdobeData: already loaded. resolve promise');
                    resolve();
                }
                
            });
    
            aaPromise.then(() => {
                console.log('handleAdobeData: promise resolved');
    
                //Adobe Suite Name: prop95, evar 95
                s.prop95 = SUITE_NAME;
                s.evar95 = SUITE_NAME;
    
                let originalReferrer = window.sessionStorage.getItem('LSKey[c]originalReferrer');
                console.log('handleAdobeData: originalReferrer value: ', originalReferrer);
                if (originalReferrer) {
                    console.log('handleAdobeData: using originalReferrer after redirect : ', originalReferrer);
                    s.referrer = originalReferrer;
                    s.prop3 = originalReferrer;
                    s.prop12 = originalReferrer;
                    window.sessionStorage.removeItem('LSKey[c]originalReferrer');
                    window.sessionStorage.setItem('LSKey[c]visitReferrer',originalReferrer);
                } else {
                    
                    let currentReferrer = window.sessionStorage.getItem('LSKey[c]currentReferrer');
                    let originalReferrer = window.sessionStorage.getItem('LSKey[c]visitReferrer');
                    console.log('handleAdobeData: originalReferrer not set, user visitReferrer : ', originalReferrer);
                    s.prop12 = originalReferrer;
                    if (currentReferrer) {
                        s.referrer = currentReferrer;
                        s.prop3 = currentReferrer;
                    } else {
                        s.referrer = document.referrer;
                        s.prop3 = document.referrer;
                    }
                    if (type == 'page') {
                        window.sessionStorage.setItem('LSKey[c]currentReferrer', window.location.href);
                    }
                    console.log('handleAdobeData: prop3/referrer: ' + s.prop3); 
                }

                //Brand (Site Section): prop1, evar3, evar130
                var getdomain = location.host.split('.').reverse();
                var root_domain =  getdomain[1];
                s.prop1 = root_domain;
                s.evar3 = root_domain;
                s.evar130 = root_domain;
    
                //Visitor ID: prop 38
                //Visitor Type: Prop 4 and Evar4
                let visitorId = getCookie('s_fid');
                if (visitorId !== null) {
                    s.prop38 = visitorId;
                }
                let visitorType = getCookie('s_nr');
                if (visitorType !== null) {
                    s.prop4 = visitorType;
                    s.evar4 = visitorType;
                }
                
                // always set these props when fired.
                s.prop2 = window.location.href;
                s.prop31 = window.sessionStorage.getItem('LSKey[c]language');
                s.prop32 = window.sessionStorage.getItem('LSKey[c]countryName');
    
                getPercentPageViewed();
                s.prop40 = window._ppvHighestPercentViewed;
                s.prop41 = window._ppvHighestPixelsSeen;
                
                for (const [key, value] of Object.entries(localDataProps)) {
                    if (key.startsWith('event')) {
                        s.events = key;
                    } else {
                        s[key] = value;
                    }
                }
    
                if (!s.prop2.includes('preview.salesforce')) {
                    if (noPageView()) {
                        console.log('handleAdobeData: NO PAGE VIEW: calling s.tl()');
                        if (s.prop7 != null && s.prop7 != undefined) {
                            s.tl(true,"o",s.prop7);
                        } else {
                            s.tl(true,"o",s.prop2);
                        } 
                    } else {
                        console.log('handleAdobeData: calling s.t()');
                        s.t();
                    }
                }
    
            }).catch(() => {
                console.log('handleAdobeData: promise rejected');
            });

        }
        
    }
}

document.addEventListener('sendadobeevent', function (event) {

    let eventDataProps = {};

    console.log('handleAdobeData: event recieved from click: ', JSON.stringify(event.detail));
    for (const [key, value] of Object.entries(event.detail.params)) {
        eventDataProps[key] = value;
    }
    eventDataProps.pageName = dataProps.pageName;
    eventDataProps.prop13 = dataProps.prop13;
    eventDataProps.prop14 = dataProps.prop14;
    eventDataProps.prop39 = dataProps.prop39;
    eventDataProps.evar74 = dataProps.evar74;
    eventDataProps.prop27 = dataProps.prop27;
    eventDataProps.evar27 = dataProps.evar27;

    handleAdobeData(eventDataProps, 'event');

});

// END Adobe