const splititInstallment = '4';
const splititMinimalPrice = 'all';

let exclusionThemes = ['Simple'];
let currency = Shopify.currency.active;
if (!currency) {
    currency = 'GBP';
}

let lang = Shopify.locale;
if (!lang) {
    lang = 'en';
}

let attemptCount = 0;

function checkAndConfigure() {
    if (typeof window.upstream_messaging === 'undefined' && attemptCount < 5) {
        attemptCount++;
        setTimeout(checkAndConfigure, 2000);
    } else if (typeof window.upstream_messaging !== 'undefined') {
        window.upstream_messaging.updateConfig({
            apiKey: '8bae12b4-9756-4e4b-89e2-21bf4aa6cf8a',
            env: 'production',
            lang: lang,
            currencyCode: currency,
            currency: currency,
            defaultInstallments: splititInstallment,
            isVIS: false,
        });
    } else {
        console.log('Failed to detect window.upstream_messaging after 5 attempts.');
    }
}

checkAndConfigure();


function generateUM(type, options) {
    let baseTag = '';
    let customOptions = '';
    let selectors = [];

    switch (type) {
        case 'strip':
            baseTag = 'spt-strip';
            break;
        case 'banner':
            baseTag = 'spt-banner';
            break;
        case 'logo':
            baseTag = 'spt-floating-logo';
            break;
        case 'one_liner':
            baseTag = 'spt-one-liner';
            break;
    }

    options.forEach(function (option) {
        let key = Object.keys(option)[0];
        let value = Object.values(option)[0];
        if (key === 'regular' || key === 'sale') {
            selectors.push({
                key: key,
                value: value
            });
        } else {
            customOptions += `${key}="${value}" `;
        }
        if (type === 'strip' && key === 'position' && value === 'top') {
            customOptions += `is_solid="true" `;
        }
    });

    
    return {
        selectors: selectors,
        options: `<${baseTag} ${customOptions}> </${baseTag}>`,
    };
}

function displaySingleOnSiteMessage(page, type, selector, options, calculate = false, price = false) {
    let pageSelector = document.querySelector(selector);

    if (!pageSelector) {
        console.log(`Splitit On Site Message selector " ${selector} " not found`);
        return;
    }

    let elementOnSiteMessage = document.createElement('div');
    elementOnSiteMessage.setAttribute('id', `upstream_messaging_${page}_${type}`);
    if (type === 'logo' || (type === 'one_liner' && (page === 'catalog' || page === 'home'))) {
        elementOnSiteMessage.style.position = 'relative';
        elementOnSiteMessage.style.zIndex = '1';
    }
    if (calculate) {
        let productPrice = price ? price : Number(pageSelector.textContent.replace(/\D+/g, '')) / 100;
        if (productPrice) {
            let installment = splititInstallment;
            if (installment) {
                options = addPriceAndInstallment(options, productPrice, installment);
            }
        }
    }
    elementOnSiteMessage.innerHTML = options;

    if (selector === 'body') {
        pageSelector.insertBefore(elementOnSiteMessage, pageSelector.firstChild);
    } else {
        pageSelector.appendChild(elementOnSiteMessage);
    }
}

function addPriceAndInstallment(customOptions, amount, installment) {
    if (amount && installment) {
        if (customOptions.includes('amount') && customOptions.includes('installments')) {
            let arrayOptions = customOptions.split(' ');
            if (arrayOptions.length) {
                arrayOptions.forEach(function (item, index) {
                    if (item.includes('installments=')) {
                        arrayOptions[index] = `installments="${installment}"`;
                    } else if (item.includes('amount')) {
                        arrayOptions[index] = `amount="${amount}"`;
                    }
                });
            }
            customOptions = arrayOptions.join(' ');
        } else {
            let priceAndInstallment = `amount="${amount}" installments="${installment}" >`;
            customOptions = customOptions.replace('> ', priceAndInstallment);
        }
    }

    return customOptions;
}

function checkExistBanner(element, page, type) {
    let oldParent = '';
    if (exclusionThemes.includes(Shopify.theme.name)) {
        oldParent = element.parentNode.parentNode;
    } else {
        oldParent = element.parentNode.parentNode.parentNode;
    }

    let notShowPlug = oldParent.querySelectorAll('[data-upstream-plug=\'true\']');
    if (notShowPlug && notShowPlug.length) {
        return false;
    }

    let findChildren = oldParent.querySelectorAll(`.upstream_messaging_${page}_${type}`);

    for (let i = 0; i < findChildren.length; i++) {
        let element = findChildren[i];
        if (element.offsetWidth || element.offsetHeight) {
            return false;
        }
    }

    return true;
}

function displayMultiOnSiteMessaging(element, options, page, type) {
    let onSiteElement = document.createElement('div');
    onSiteElement.setAttribute('class', `upstream_messaging_${page}_${type}`);
    if (type === 'logo' || ((type === 'one_liner' || type === 'banner') && (page === 'catalog' || page === 'home'))) {
        onSiteElement.style.position = 'relative';
        onSiteElement.style.zIndex = '1';
    }
    onSiteElement.innerHTML = options;
    element.setAttribute('data-upstream-plug', 'true');

    element.parentNode.parentNode.appendChild(onSiteElement);
}

function addSaleBanner(selector, options, page, type) {
    let productElements = document.querySelectorAll(selector);
    if (productElements.length) {
        for (let i = productElements.length - 1; i > -1; --i) {
            let element = productElements[i];
            if (element && element.textContent && (element.textContent.trim()).length && (element.offsetWidth > 0 && element.offsetHeight > 0)) {
                if (checkExistBanner(element, page, type)) {
                    let productPrice = Number(element.textContent.replace(/\D+/g, '')) / 100;
                    if (splititMinimalPrice === 'all' || Number(splititMinimalPrice) <= Number(productPrice)) {
                        let onSiteOptions = addPriceAndInstallment(options, productPrice, splititInstallment);
                        displayMultiOnSiteMessaging(element, onSiteOptions, page, type);
                    } else {
                        element.setAttribute('data-upstream-plug', 'true');
                    }
                }
            }
        }
    }
}

function addRegularBanner(selector, options, page, type) {
    let productElements = document.querySelectorAll(selector);
    if (productElements.length) {
        for (let i = productElements.length - 1; i > -1; --i) {
            let element = productElements[i];
            if (checkExistBanner(element, page, type)) {
                if (element && element.textContent && (element.textContent.trim()).length && element.offsetWidth > 0 && element.offsetHeight > 0) {
                    let productPrice = Number(element.textContent.replace(/\D+/g, '')) / 100;
                    if (splititMinimalPrice === 'all' || Number(splititMinimalPrice) <= Number(productPrice)) {
                        let onSiteOptions = addPriceAndInstallment(options, productPrice, splititInstallment);
                        displayMultiOnSiteMessaging(element, onSiteOptions, page, type);
                    }
                }
            }
        }
    }
}
const themeToShowHome = ["bushwear-2-theme\/main","BushWear\/7.6.0"];

    if (themeToShowHome.indexOf(Shopify.theme.name) != -1 || themeToShowHome.indexOf('all') != -1) {
                                        window.ProductPage = class {
    async addUpstreamMessagingProduct() {
        if (location.hostname.indexOf('harbourlifestyle.co.uk') != -1 && 'one_liner' == 'one_liner') {// TODO CHANGE URL
            let price = await this.getPriceSelectedProduct();

let existProductBanners = document.querySelectorAll('[id="upstream_messaging_learn_more_custom"]');
if (existProductBanners.length) {
    [].forEach.call(existProductBanners, function (banner) {
        banner.remove();
    });
}

if (price && (splititMinimalPrice === 'all' || Number(splititMinimalPrice) <= Number(price))) {
    let regularSelector = [{"regular":".product-single__splitit"},{"learn_more_color":"#94d6d0"},{"logo_color":"#39bca7"},{"text_option":"payment-a-month"}].find(option => 'regular' in option);
    let pageSelector = document.querySelector(regularSelector.regular);

    if (!pageSelector) {
        console.log(`Splitit On Site Message selector " ${selector} " not found`);
        return;
    }

    let learnMoreDiv = document.createElement('div');
    learnMoreDiv.setAttribute('id', 'upstream_messaging_learn_more_custom');
    learnMoreDiv.setAttribute('class', 'text-black underline font-gillMedium hover:no-underline');
    learnMoreDiv.innerHTML = 'Learn more';

    pageSelector.appendChild(learnMoreDiv);

    learnMoreDiv.addEventListener('click', function() {
        window.upstream_messaging.openLearnMore({amount: price, numInstallments: splititInstallment, isVISPlan: ''})
    });
}
        } else {
            if ('one_liner' == 'strip') {
                let options = generateUM('strip', [{"regular":".product-single__splitit"},{"learn_more_color":"#94d6d0"},{"logo_color":"#39bca7"},{"text_option":"payment-a-month"}]).options;
                displaySingleOnSiteMessage('product', 'strip', 'body', options);
            } else {
                let existProductBanners = document.querySelectorAll('[id="upstream_messaging_' + 'product' + '_' + 'one_liner"]');
                if (existProductBanners.length) {
                    [].forEach.call(existProductBanners, function (banner) {
                        banner.remove();
                    });
                }

                let price = await this.getPriceSelectedProduct();
                if (price && (splititMinimalPrice === 'all' || Number(splititMinimalPrice) <= Number(price))) {
                    let onSiteObject = generateUM('one_liner', [{"regular":".product-single__splitit"},{"learn_more_color":"#94d6d0"},{"logo_color":"#39bca7"},{"text_option":"payment-a-month"}]);
                    let selectors = onSiteObject.selectors;
                    let regularSelector = selectors.find(selector => selector.key === 'regular');
                    displaySingleOnSiteMessage('product', 'one_liner', regularSelector.value, onSiteObject.options, true, price);

                    if(!document.getElementById('upstream_messaging_' + 'product' + '_' + 'one_liner')){
                        let saleSelector = selectors.find(selector => selector.key === 'sale');

                        displaySingleOnSiteMessage('product', 'one_liner', saleSelector.value, onSiteObject.options, true, price);
                    }
                }
            }
        }
    }

    async getProduct() {
        try {
            let response = await fetch(window.location.pathname + '.json');

            return response.json();
        } catch (error) {
            console.error('Error:', error);
        }
    }

    async getPriceSelectedProduct() {
        let configProduct = location.search.split('variant=')[1];

        let product = await this.getProduct()
            .then((data) => {
                return data.product;
            });

        let selectedProduct = false;

        if (configProduct) {
            selectedProduct = product.variants.find(variant => {
                return variant.id == configProduct;
            });
        } else {
            selectedProduct = product.variants[0];
        }

        return selectedProduct.price;
    }
};

let productForm = document.querySelector('form[action="/cart/add"]');
let productPageClass = new ProductPage();

if (productForm) {
    let timeoutId;
    let alreadyWorked = false;
    productForm.addEventListener('change', function () {
        if (timeoutId) {
            clearTimeout(timeoutId);
        }
        timeoutId = setTimeout(function () {
            productPageClass.addUpstreamMessagingProduct();
            alreadyWorked = true;
            timeoutId = null;
        }, 1000);
    });

// ADDED CUSTOM FUNCTIONAL ONLY intlbeautyinstitute store
    if (location.hostname.indexOf('shop.intlbeautyinstitute.com') != -1) {
        let variantIdSplitit = document.querySelector('input[name="id"]').value;
        let timeOutIdSplitit = '';

        function checkChangeProduct(id = false) {
            let newVariantIdSplitit = document.querySelector('input[name="id"]').value;
            if (variantIdSplitit != newVariantIdSplitit) {
                variantIdSplitit = newVariantIdSplitit;
                productPageClass.addUpstreamMessagingProduct();
            }
            clearTimeout(id);
            clearTimeout(timeOutIdSplitit);
        }

        let parent = document.querySelector('form[action="/cart/add"]');
        parent.addEventListener('mouseover', function () {
            timeOutIdSplitit = setTimeout(checkChangeProduct, 3000, timeOutIdSplitit);
        });
    }
// FINISH CUSTOM FUNCTIONAL

//Added additional checker to run our functionality
    setTimeout(function () {
        let existProductBanners = document.querySelector('[id="upstream_messaging_' + 'product' + '_' + 'one_liner"]');
        if (!existProductBanners && !alreadyWorked) {
            productPageClass.addUpstreamMessagingProduct();
            alreadyWorked = true;
        }
    }, 1000);
}

if (ShopifyAnalytics && ShopifyAnalytics.meta.page.pageType === 'product') {
    const productPageClass = new ProductPage();
    productPageClass.addUpstreamMessagingProduct();
}
                               }
