// init data layer
window.digitalData = window.digitalData || [];

// dev and staging orgs
developmentOrgs = ['exppod2','mvcomdev1','exppod4','mvwvo--devstage','qa-mvw','mvwvo--qa','digexp','wp4stage','mvwvo--qa1'];
stagingOrgs = ['uat-mvw','mvwvo--uat'];

// Adobe Analytics: global view change
document.addEventListener('analyticsViewChange', function (e) {

    // update data layer
    window.digitalData.push({
        'event': 'pageLoad',
        'pageInfo': {
            'pageName': getMeta('mv-page-name') ? getMeta('mv-page-name') : e.target.title,
            'siteSection': getMeta('mv-site-section') ? getMeta('mv-site-section') : '',
            'pageUrlSpa': e.target.URL
        }
    });

    loadAdobeAnalytics(e.target.location.hostname);

    // DEBUG: basic event detail from forceCommunity:routeChange
    if (e.detail.debug) {
        console.log('forceCommunity:routeChange', e);
    }
});

// Adobe Analytics: Form Start
document.addEventListener('analyticsFormStart', function (e) {

    // update data layer
    window.digitalData.push({
        'event': 'formStart',
        'pageInfo': {
            'pageName': getMeta('mv-page-name') ? getMeta('mv-page-name') : e.target.title,
            'siteSection': getMeta('mv-site-section') ? getMeta('mv-site-section') : '',
            'pageUrlSpa': e.target.URL,
            'formLOC': e.detail.loc ? e.detail.loc : ''
        },
        'formInfo': {
            'locCodeFormID': e.detail.loc
        }
    });

    loadAdobeAnalytics(e.target.location.hostname);
});

// Adobe Analytics: Form Complete
document.addEventListener('analyticsFormComplete', function (e) {

    // update data layer
    window.digitalData.push({
        'event': 'formComplete',
        'pageInfo': {
            'pageName': getMeta('mv-page-name') ? getMeta('mv-page-name') : e.target.title,
            'siteSection': getMeta('mv-site-section') ? getMeta('mv-site-section') : '',
            'pageUrlSpa': e.target.URL,
            'formLOC': e.detail.loc ? e.detail.loc : ''
        },
        'formInfo': {
            'locCodeFormID': e.detail.loc
        }
    });

    loadAdobeAnalytics(e.target.location.hostname);
});

// Adobe Analytics: Inspiration (Blog) Article Detail
document.addEventListener('analyticsBlogArticlePage', function (e) {

    // update data layer
    window.digitalData.push({
        'event': 'blogArticlePage',
        'pageInfo': {
            'pageName': e.detail.pageName,
            'siteSection': 'Inspiration',
            'pageUrlSpa': e.target.URL
        }
    });

    loadAdobeAnalytics(e.target.location.hostname);
});

// Adobe Analytics: Resort Detail (Location Object) page
document.addEventListener('analyticsResortDetailPage', function (e) {

    console.log('analyticsResortDetailPage listener', e.detail);

    // update data layer
    window.digitalData.push({
        'event': 'resortDetailPage',
        'pageInfo': {
            'pageName': e.detail.pageName,
            'siteSection': 'Experiences',
            'pageUrlSpa': e.target.URL
        }
    });

    loadAdobeAnalytics(e.target.location.hostname);
});

// Adobe Analytics: capture custom link clicks
document.addEventListener('analyticsCustomLinkClick', function (e) {

    // update data layer
    window.digitalData.push({
        'event': 'customLink',
        'linkInfo': {
            'linkClickPage': getMeta('mv-page-name') ? getMeta('mv-page-name') : e.target.title,
            'linkClickRegion': e.detail.linkClickRegion,
            'linkName': e.detail.linkName
        }
    });

    loadAdobeAnalytics(e.target.location.hostname);
});

// Adobe Analytics: capture 'use my ownership to book' link clicks
document.addEventListener('analyticsOwnershipBook', function (e) {

    // update data layer
    window.digitalData.push({
        'event': 'ownershipBook',
        'linkInfo': {
            'linkClickPage': getMeta('mv-page-name') ? getMeta('mv-page-name') : e.target.title,
            'linkClickRegion': e.detail.linkClickRegion,
            'linkName': e.detail.linkName
        }
    });

    loadAdobeAnalytics(e.target.location.hostname);
});

// Adobe Analytics: Preview Booking Engine
document.addEventListener('analyticsPbePage', function (e) {
    loadPbeAdobeAnalytics(e.target.location.hostname);

    const { track, pageInfo } = e.detail;

    if (!track) {
        const dataPageInfo = {
            pageInfo: {
                ...pageInfo,
                siteSection: 'PBE',
                pageUrlSpa: e.target.URL
            }
        }

        console.log('dataPageInfo', dataPageInfo);

        // update data layer
        window.digitalData.push(dataPageInfo);

        console.log('window.digitalData', window.digitalData);

    } else {
        console.log('track', track);
        _satellite.track(track);
    }
});

// load Adobe launch script
function loadAdobeAnalytics(location) {

    scriptSrc = '';

    // const checkURL = (strings) => {
    //     const currentURL = window.location.href;
    //     return strings.some(string => currentURL.includes(string));
    // }

    // update Adobe launch src by org
    switch(true) {
        case developmentOrgs.some((v) => location.includes(v)): scriptSrc = 'https://assets.adobedtm.com/72eef91a8bc6/7f1f5ee92665/launch-0981dde93f02-development.min.js'; break;
        case stagingOrgs.some(v => location.includes(v)): scriptSrc = 'https://assets.adobedtm.com/72eef91a8bc6/7f1f5ee92665/launch-46f324ea127a-staging.min.js'; break;
        case location.includes('marriottvacationclub'): scriptSrc = 'https://assets.adobedtm.com/72eef91a8bc6/7f1f5ee92665/launch-727d22e733f7.min.js'; break; // production
        default: scriptSrc = 'https://assets.adobedtm.com/72eef91a8bc6/7f1f5ee92665/launch-727d22e733f7.min.js'; // production
    }

    if (document.getElementById('MVAdobeAnalytics') === null) {
        script = document.createElement('script');
        script.async;
        script.src = scriptSrc;
        script.id = 'MVAdobeAnalytics';
        document.head.appendChild(script);
    }

    // Remove PBE Analytics Scripts if present.
    MvPbeAaScriptEl = document.getElementById('MVPBEAdobeAnalytics');
    if (MvPbeAaScriptEl) {
        MvPbeAaScriptEl.remove();
    }
}

// load Adobe PBE launch script
function loadPbeAdobeAnalytics(location) {

    scriptSrc = '';

    // update Adobe launch src by org
    switch(true) {
        case developmentOrgs.some((v) => location.includes(v)): scriptSrc = 'https://assets.adobedtm.com/72eef91a8bc6/c64457fd0d49/launch-8db1eebebbcf-development.min.js'; break;
        case stagingOrgs.some(v => location.includes(v)): scriptSrc = 'https://assets.adobedtm.com/72eef91a8bc6/c64457fd0d49/launch-38fac017db7d-staging.min.js'; break;
        case location.includes('marriottvacationclub'): scriptSrc = 'https://assets.adobedtm.com/72eef91a8bc6/c64457fd0d49/launch-103659b383d5.min.js'; break; // production
        default: scriptSrc = 'https://assets.adobedtm.com/72eef91a8bc6/c64457fd0d49/launch-103659b383d5.min.js'; // production
    }

    if (document.getElementById('MVPBEAdobeAnalytics') === null) {
        script = document.createElement('script');
        script.async;
        script.src = scriptSrc;
        script.id = 'MVPBEAdobeAnalytics';
        document.head.appendChild(script);
    }

    // Remove Default Analytics Scripts if present.
    MvAaScriptEl = document.getElementById('MVAdobeAnalytics');

    if (MvAaScriptEl) {
        MvAaScriptEl.remove();
    }
}

// Get Meta tags
function getMeta(metaName) {
    const metas = document.getElementsByTagName('meta');

    for (let i = 0; i < metas.length; i++) {
      if (metas[i].getAttribute('name') === metaName) {
        return metas[i].getAttribute('content');
      }
    }

    return '';
}