const identity_tag_version = "1.7.1";
const idAid = "0eb9034a";   
const idPid = "ozc~qbtfvap";

// Session management logic
const SESSION_KEY = 'id_tag_session_id';
const SESSION_TIMESTAMP_KEY = 'id_tag_session_last_activity';
const SESSION_TIMEOUT = 30 * 60 * 1000; // 30 minutes in ms


function genUniqueId() {
    return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, c => (
        c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4
    ).toString(16));
}

function getSessionId() {
    const now = Date.now();
    let sessionId = localStorage.getItem(SESSION_KEY);
    let lastActivity = parseInt(localStorage.getItem(SESSION_TIMESTAMP_KEY), 10);

    if (!sessionId || isNaN(lastActivity) || (now - lastActivity) > SESSION_TIMEOUT) {
        // New session
        sessionId = genUniqueId();
    }
    // Update last activity
    localStorage.setItem(SESSION_KEY, sessionId);
    localStorage.setItem(SESSION_TIMESTAMP_KEY, now.toString());
    return sessionId;
}

function getIdentityTag(partner_id, agency_id, pageview_id, session_id) {    
    const idTag1 = document.createElement("script");
    idTag1.src = `https://tag.prospectdesk.ai/ldc.js?pid=${partner_id}&aid=${agency_id}`
    idTag1.async = true;
    document.head.appendChild(idTag1);

    const extPayload = {
        session_id: session_id,
        pageview_id: pageview_id
    };

    const extQueryString = new URLSearchParams(extPayload).toString();
    const extId = encodeURIComponent(extQueryString);

    
    const idTag2 = document.createElement("script")
    idTag2.innerHTML = `window.ldcDataLayer = window.ldcDataLayer || []; function ldcConfig(){{ldcDataLayer.push(arguments);}}; ldcConfig('externalId', '${extId}');`
    document.head.appendChild(idTag2);
}

console.log(`id tag: ${identity_tag_version}`)



if (idPid) {
    if (document.readyState !== "complete") {
        //wait 1 second and check again
        setTimeout(function() {
            try {
                const sessionId = getSessionId();
                const pageviewIdVal = genUniqueId();
                getIdentityTag(idPid, idAid, pageviewIdVal, sessionId);
            } catch (error) {
                window.addEventListener('DOMContentLoaded', function() {
                    const sessionId = getSessionId();
                    const pageviewIdVal = genUniqueId();
                    getIdentityTag(idPid, idAid, pageviewIdVal, sessionId);
                });
            }
        }, 1000);


    } else {
        const sessionId = getSessionId();
        const pageviewIdVal = genUniqueId();
        getIdentityTag(idPid, idAid, pageviewIdVal, sessionId);
    }
}

