var ss_xdataSent = false; // Flag to check if data has already been sent
var scriptURL = document.currentScript.src;
var script_domain = new URL(scriptURL).origin;

function sendData() {
    if(ss_xdataSent) return; // Prevent sending data more than once
    ss_xdataSent = true;

    window.index_conversion = window.index_conversion || {}; // Assuming index_conversion is defined earlier
    var screen_resolution = window.screen.width + "x" + window.screen.height;
    index_conversion.currentURL = window.location.href || "";
    index_conversion.referrerURL = document.referrer || "";
    index_conversion.titleURL = document.title || "";
    index_conversion.screen_resolution = screen_resolution || "";
    index_conversion.user_agent = navigator.userAgent || "";
    index_conversion.language = (navigator.language || "cs-cz").toLowerCase() || "cs-cz";
    index_conversion.mobile = !navigator.userAgentData || navigator.userAgentData.mobile;
    index_conversion.version = "4";
    index_conversion.cookie = index_conversion.cookie || document.cookie;
    index_conversion.unixTime =  Math.floor(Date.now() / 1000);

    index_conversion.user_enhanced_data = index_conversion.user_enhanced_data || extractUserData(dataLayer);

    var e = script_domain;

    try {
        fetch(`${e}/index_gv2/`, {
            method: "POST",
            mode: "no-cors",
            credentials: "include",
            headers: { "Content-Type": "application/x-www-form-urlencoded" },
            body: new URLSearchParams({ custom_data: JSON.stringify(index_conversion) }),
        })
            .then((e) => {})
            .catch((e) => {
                console.error("Error sending data:", e);
            });
    } catch (r) {
        console.error("Error sending data:", r);
    }
}

window.addEventListener('load', sendData); // Send data on page load
window.addEventListener('beforeunload', sendData); // Attempt to send data before page unloads

if (typeof cookieStore !== 'undefined') {
    const handleChange = (event) => {
        if (event.changed.some(cookie => cookie.name === '_ga')) {
            ss_xdataSent = false;
            sendData();
            cookieStore.removeEventListener('change', handleChange);
        }
    };
    
    cookieStore.get('_ga').then(cookie => {
        if (!cookie) {
            cookieStore.addEventListener('change', handleChange);
        }
    });
}


function extractUserData(events) {
    let output = {
        email: "",
        phone_number: "",
        address: {
            first_name: "",
            last_name: "",
            street: "",
            city: "",
            postal_code: "",
            country: ""
        }
    };

    events.forEach(event => {
        if (event.customerEmail) {
            output.email = event.customerEmail;
            output.phone_number = event.customerPhone;
            output.address.first_name = event.billingAddress.firstName;
            output.address.last_name = event.billingAddress.lastName;
            output.address.street = event.billingAddress.street;
            output.address.city = event.billingAddress.city;
            output.address.postal_code = event.billingAddress.postcode;
            output.address.country = event.billingAddress.countryCode;
        }
    });

    if (!output.email) {
        output = {}
    }

    return output;
}
