/* eslint-disable no-alert, no-console , no-debugger  */
import { getDomain, getCookieByName, removeCookieByName } from "@/services/auth";

export const doFormatAddress = (address) => {
    let newaddress = address.streetNoOne + " " + address.city + " " + address.regionId + " " + address.countryId;
    return newaddress;
};
export const fetchStates = (countryId, countryWiseStates) => {
    let oneCountry = countryWiseStates.filter(
        states => {
            return states.id == countryId;
        }
    );
    if (oneCountry.length > 0 &&  oneCountry[0].availableRegions) {
        let allStates = oneCountry[0].availableRegions.map(val => {
            return {
                value: val.id,
                label: val.name
            };
        });
        return allStates;
    } else {
        return [{ "value": "", "label": "No States Found" }];
    }
}

export const attribute = (customAttributes, attributeCode, productAttributes) => {
    if (productAttributes.items && customAttributes) {
        let result = customAttributes.filter(element => {
            return element.attributeCode === attributeCode;
        });
        if (result.length > 0) {
            let val = result[0].value; //254 //uom
            let newValue = productAttributes.items.filter(elements => {
                return elements.attributeCode === attributeCode
            });
            let filter = newValue[0].options.filter(elementNew => {
                return elementNew.value === val
            });
            if (filter.length > 0) {
                return filter[0].label;
            }
        }
    }
}

export const customAttributeValueNew = (customAttributes, attributeCode) => {
    let result = customAttributes.filter(element => {
        return element.ac === attributeCode;
    });
    if (result[0])
        return result[0].v;
    else return '';
}
export const customAttributeValue = (customAttributes, attributeCode) => {
    let result = customAttributes.filter(element => {
        return element.attributeCode === attributeCode;
    });
    if (result[0])
        return result[0].value;
    else return '';
}

export const getLable = (customAttributes, attributeCode) => {
    let result = customAttributes.filter(element => {
        return element.attributeCode === attributeCode;
    });
    if (result[0])
        return result[0].label;
    else return '';
}

export const getMeta = (data) => {
    let metaObj = {};
    if (data) {
        data.filter(element => {
            if (element.attributeCode === "meta_title")
                metaObj.title = element.value;
            if (element.attributeCode === "meta_description")
                metaObj.description = element.value;
            if (element.attributeCode === "meta_keywords")
                metaObj.keywords = element.value;
            if (element.attributeCode === "meta_keyword")
                metaObj.keywords = element.value;
        });
    }

    return metaObj;
}
export const getCategoryOne = (list, categoryId) => {
    let result = list.filter(element => {
        return element.id === categoryId;
    });
    if (result[0])
        return result[0];
    else return '';
}
export const commonValidationRules = {
    noRules: [],
    passwordRule: [
        v => !!v || "Password is required",
        v => /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9])(?!.*\s).{8,}$/.test(v) || "Password must contain atleast one lowercase, one uppercase, one digit and one special character"
    ],
}
export const goToCategoryPage = (vm, category, subCategory, subChlid, categoryId) => {
    vm.$router
        .push({
            name: "CategoryPage",
            params: {
                category: category,
                subCategory: subCategory,
                subChlid: subChlid
            },
            query: {
                "pageNumber": 1,
                "pageSize": "9",
                "sortBy": "position",
                //"category": categoryId,
                "filter": 'e30='
            },
            meta: {
                id: categoryId
            }
        }).catch(error => {
            error;
        });
}
export const goToCategoryPageRouting = (vm, category) => {
    vm.$router
        .push({
            name: category.n + "_" + category.id,
            /* query: {
                 "pageNumber": 1,
                 "pageSize": "9",
                 "sortBy": "position",
                 "filter": 'e30='
             },*/
        }).catch(error => {
            error;
        });
}

function getlabelValue(customAttributes, attributeCode) {
    let result = customAttributes.filter(element => {
        return element.attributeCode === attributeCode;
    });
    if (result[0])
        return result[0].label;
    else return '';
}

function getlabelValuePurchase(customAttributes) {
    try {
        let label = JSON.parse(customAttributes);
        if (label)
            return label.label;
        else return '';
    } catch (error) {
        console.log("error", error);
        return "";
    }

}
export const getCategoriesPurchase = (product) => {
    try {
        let categoryLink = product.extensionAttributes.categoryLinks;
        for (let i = 0; i < 2; i++) {
            let newVal = JSON.parse(categoryLink[i]);
            if (newVal) {
                return newVal.category_name;
            }
        }
    } catch (error) {
        console.log("error", error);
        return "";
    }

    return "";
}

export const googleAanalytics = (vm, res, productDetails, qtyNew, action, name) => {
    setTimeout(() => {
        let catName = null;

        if (getCookieByName(res.item_id)) {
            catName = getCookieByName(res.item_id)
            catName = catName.split(':')[0];
        }

        else if (productDetails.extensionAttribute.catagoryLinks[0]) {
            catName = productDetails.extensionAttribute.catagoryLinks[0].categoryName;
        }
        let gtag = window.gtag ? window.gtag : null;
        if (gtag) {
            gtag('event', action, {
                "items": [{
                    'id': productDetails.sku,
                    'name': productDetails.name,
                    'category': catName,
                    'brand': getlabelValue(productDetails.customAttribute, "brand"),
                    'price': res.price,
                    'quantity': qtyNew
                }]
            });
        }

        console.log("google analytics called ", action, name);
    }, 500)


}
export const googleAanalyticsEventRemoveCart = (action, productDetails) => {
        let gtag = window.gtag ? window.gtag : null;
        if (gtag) {
            gtag('event', action, {
                "items": [{
                    'id': productDetails.sku,
                    'name': productDetails.name,
                    //'category': category,
                    //'brand': getlabelValue(productDetails.customAttribute, "brand"),
                    'price': productDetails.price,
                    'quantity': productDetails.qty
                }]
            });
        }
        console.log("google analytics called ", action);
}
export const googleAanalyticsEventSelectContent =async (action, productDetails,categoryId) => {
    let category = ''
    let listName = ''
    if (categoryId) {
        listName = "Category Results"
        category = await getCatPath(categoryId)
    } else {
        listName = "Search Results"
        category = "Search"
    }
        let gtag = window.gtag ? window.gtag : null;
        if (gtag) {
            let item = []
                let productPrice = ''
                if (productDetails.lp) {
                    productPrice = productDetails.lp
                } else {
                    if (productDetails.sp) {
                        productPrice = roundUp(productDetails.sp)
                    } else if (productDetails.p != 0) {
                        productPrice = productDetails.p
                    }
                }
                item.push({
                    'id': productDetails.sku,
                    'name': productDetails.n,
                    'list_name': listName,
                    'brand': productDetails.b,
                    'category':category,
                    'variant': productDetails.dc,
                    'price': productPrice,
                    //'quantity': productDetails.qty
                })
            
            if (item.length > 0) {
                gtag('event', action, {
                    "content_type": "product",
                    "items": item
                });
            }
        }
        console.log("google analytics called ", action);
}
export const criteoForProductList = (productList) => {
    let productIds = [];
    if (productList.length) {
        for (let p = 0; p < productList.length; p++) {
            productIds.push(productList[p].id);
            if (p == 2) break;
        }
        window.criteo_q.push(
            { event: "viewList", item: productIds }
        );
        console.log("view product list", productIds);
        // checkDataLayerPropDuplication("ListingPage", "ProductIDList", productIds);
    }
};
export const criteoForCurrentProduct = (productId) => {
    if (productId) {
        window.criteo_q.push(
            { event: "viewItem", item: productId }
        );
        console.log("view product", productId);
        // checkDataLayerPropDuplication("ProductPage", "ProductID", productId);
    }
};
export const criteoUpdateUserEmail = (email) => {
    window.criteo_q.push(
        { event: "setEmail", email: email }
    );
    console.log("user email", email);
};
export const criteoViewBasket = (list) => {
    let items = [];
    for (let i = 0; i < list.length; i++) {
        let item = list[i];
        items.push(
            { id: item.stockDetails.productId, price: item.price, quantity: item.qty }
        );
    }
    if (items.length > 0) {
        window.criteo_q.push(
            {
                event: "viewBasket",
                item: items
            });
    }

    console.log("view basket", items);
};
export const listrakCartList = (list) => {
    let items = [];
    for (let i = 0; i < list.length; i++) {
        let productDetails = list[i];
        if (window._ltk) {

            window._ltk.SCA.AddItemWithLinks(productDetails.sku, productDetails.qty, productDetails.price, productDetails.name, productDetails.customAttributes.image, productDetails.customAttributes.urlKey);
            window._ltk.SCA.Submit();
            console.log("listrak  add to cart event called ", productDetails.sku, productDetails.qty, productDetails.price, productDetails.name, productDetails.customAttributes.image, productDetails.customAttributes.urlKey);
        }

    }

    console.log("view basket", items);
};
export const listrakCartListClear = () => {  
        if (window._ltk) {
            window._ltk.SCA.ClearCart();
    }
    console.log("listrak Clear Cart called");
};
export const googleAanalyticsPurchase = (resp, incrementId) => {

    let items = [];
    let purchasedProductList = [];
    for (let i = 0; i < resp.items.length; i++) {
        let item = resp.items[i];
        let catName = "";

        if (getCookieByName(item.quoteItemId)) {
            catName = getCookieByName(item.quoteItemId)
            catName = catName.split(':')[0];
            removeCookieByName(item.quoteItemId)
        }
        else if (item.extensionAttributes["categoryLinks"]) {
            try {
                let categoryLink = JSON.parse(item.extensionAttributes["categoryLinks"][0]);
                catName = categoryLink.category_name;

            } catch (error) {
                console.log("error", error);
            }

        }

        items.push({
            'id': item.sku,
            'name': item.name,
            'category': catName,
            'brand': getlabelValuePurchase(item.extensionAttributes.customAttributes),
            'price': item.price,
            'quantity': item.qtyOrdered
        })
        purchasedProductList.push(
            { id: item.productId, price: item.price, quantity: item.qtyOrdered }
        );
    }

    // let gtag = window.gtag ? window.gtag : null;
    // if (gtag) {
    //     gtag('event', 'purchase', {
    //         'transaction_id': incrementId,
    //         'affiliation': 'Crane',
    //         'value': resp.baseSubtotal,
    //         'tax': resp.taxAmount,
    //         'shipping': resp.shippingInclTax,
    //         'coupon': resp.couponCode ? resp.couponCode : '',
    //         "items": items
    //     });
    // }


    window.dataLayer = window.dataLayer || [];

    window.dataLayer.push({
        'event': 'purchase',
        'ecommerce': {
            'purchase': {
                "actionField": { "id": incrementId, "affiliation": "Crane", "revenue": resp.baseSubtotal, "tax": resp.taxAmount, "shipping": resp.shippingInclTax, 'coupon': resp.couponCode ? resp.couponCode : '' },
                'products': items
            }
        }
    });

    // window.dataLayer.push({
    //     'event': 'purchase',
    //     'ecommerce': {
    //         'purchase': {
    //             "actionField": { "id": incrementId, "affiliation": "Crane", "revenue": resp.baseSubtotal, "tax": resp.taxAmount, "shipping": resp.shippingInclTax, 'coupon': resp.couponCode ? resp.couponCode : '' },
    //             'transaction_id': incrementId,
    //             'affiliation': 'Crane',
    //             'value': resp.baseSubtotal,
    //             'tax': resp.taxAmount,
    //             'shipping': resp.shippingInclTax,
    //             'coupon': resp.couponCode ? resp.couponCode : '',
    //             'items': items
    //         }
    //     }
    // });  

    // let dlObjects = [{
    //     "pageName": "Success Page",
    //     "pageType": "purchase",
    //     "ecommerce": {
    //         "purchase": {
    //             "actionField": { "id": incrementId, "affiliation": "Crane", "revenue": resp.baseSubtotal, "tax": resp.taxAmount, "shipping": resp.shippingInclTax, 'coupon': resp.couponCode ? resp.couponCode : '' },
    //             "products": items
    //         },
    //         "currencyCode": resp.orderCurrencyCode
    //     }
    // }];
    // console.log("dlObjects", dlObjects);

    // for (let i in dlObjects) {
    //     window.dataLayer.push(dlObjects[i]);
    // }

    //criteo tag - purchase  order
    window.criteo_q.push(
        {
            event: "trackTransaction",
            id: incrementId,
            item: purchasedProductList
        });

    // let purchasedDlObjects = {
    //     "pageType": "TransactionPage",
    //     "ProductBasketProducts": purchasedProductList,
    //     "TransactionID": incrementId
    // }
    // window.dataLayer.push(purchasedDlObjects);
    console.log("criteo track transaction ", purchasedProductList);
    console.log("Track transaction id ", incrementId);

    if (window._ltk) {
        window._ltk.Order.SetCustomer(resp.customerEmail, resp.customerFirstname, resp.customerLastname);
        window._ltk.Order.OrderNumber = incrementId;
        window._ltk.Order.ItemTotal = resp.baseSubtotal;
        window._ltk.Order.ShippingTotal = resp.shippingInclTax;
        window._ltk.Order.TaxTotal = resp.baseTaxAmount;
        window._ltk.Order.HandlingTotal = '0.00';
        window._ltk.Order.OrderTotal = resp.baseGrandTotal;

        for (let i = 0; i < resp.items.length; i++) {
            let item = resp.items[i];
            window._ltk.Order.AddItem(item.sku, item.qtyOrdered, item.price); // one line per item ordered
        }
        window._ltk.Order.Submit();
        console.log("listrak purchased event called", resp);

        window._ltk.SCA.Update("email", resp.customerEmail);
        console.log("listrak email event called", resp.customerEmail);
        window._ltk.SCA.ClearCart();
    }
}
export const getCatPath = async (catId) => {
    let path = '';
    let categoryDetailsList = window.craneCatalog;
    let categoryOne = await getCategoryOne(
        categoryDetailsList.allCategoryDetails,
        Number(catId)
    );
    if (categoryOne) {
        path = categoryOne.n;
    }

    return path;
}
export const googleAanalyticsEventPDP = async (productDetails, action, categoryId) => {
    let catName = '';
    if (categoryId) {
        catName = await getCatPath(categoryId);
    }
    else {
        if (productDetails.extensionAttribute.catagoryLinks[0]) {
            let catId = productDetails.extensionAttribute.catagoryLinks[0].catagoryId;
            catName = await getCatPath(catId);
        }
    }

    let gtag = window.gtag ? window.gtag : null;
    if (gtag) {
        gtag('event', action, {
            'event_category': "ecommerce",
            "items": [{
                'id': productDetails.sku,
                'name': productDetails.name,
                'category': catName,
                'brand': getlabelValue(productDetails.customAttribute, "brand"),
                //'price': productDetails.price,
                //'quantity': qtyNew
            }]
        });
    }

    console.log("google analytics event called ", action, categoryId, catName);
    if (window._ltk) {
        window._ltk.Activity.AddProductBrowse(productDetails.sku);
        console.log("listrak event called ", productDetails.sku);
    }
}

export const listrakEmailCapture = (email) => {
    if (window._ltk) {
        window._ltk.SCA.Update("email", email)
        console.log("listrak email event called ", email);
    }
}
export const googleAanalyticsEvent = (action, category, productDetails) => {

    let gtag = window.gtag ? window.gtag : null;
    if (gtag) {
        gtag('event', action, {
            'event_category': category,
            'event_label': productDetails.name,
            'value': productDetails.sku
        });
    }
    console.log("google analytics event called ", action);
}
export const googleAanalyticsCheckoutAddPaymentInfo = (action, options) => {
    let gtag = window.gtag ? window.gtag : null;
    if (gtag) {
        let itemList = []
        for (let i = 0; i < options.items.length; i++) {
            itemList.push({
                "item_id": options.items[i].sku,
                "item_name": options.items[i].name,
                //"coupon": listName,
                //"discount": options[i].b,
                //"affiliation": category,
                //"item_brand": options[i].customAttributes.brand,
                //"item_category": productPrice,
                //"item_variant":options[i].customAttributes.color,
                "price": options.items[i].price,
                "currency": 'USD',
                "quantity": options.items[i].qtyOrdered
            })
        }

        gtag('event', 'checkout_progress', {
            "checkout_step": 3,
            "checkout_option": "payment_method",
            "value": 1,
            items: itemList
        });

    }
    console.log("google analytics called ", action);
}
export const googleAanalyticsCheckoutAddShippingInfo = (action, options) => {
    let gtag = window.gtag ? window.gtag : null;
    if (gtag) {
        let itemList = []
        for (let i = 0; i < options.length; i++) {
            itemList.push({
                "item_id": options[i].sku,
                "item_name": options[i].name,
                "price": options[i].price,
                "currency": 'USD',
                "quantity": options[i].qty
            })
        }

        gtag('event', 'checkout_progress', {
            "checkout_step": 2,
            "checkout_option": "shipping method",
            "value": 3,
            items: itemList
        });

    }
    console.log("google analytics called ", action);
}
export const googleAanalyticsEventCategoryPage = async (productDetails, categoryId) => {
    let gtag = window.gtag ? window.gtag : null;
    let category = ''
    let listName = ''
    if (categoryId) {
        listName = "Category Results"
        category = await getCatPath(categoryId)
    } else {
        listName = "Search Results"
        category = "Search"
    }

    if (gtag) {
        let itemList = []
        for (let i = 0; i < productDetails.length; i++) {
            let productPrice = ''
            if (productDetails[i].lp) {
                productPrice = productDetails[i].lp
            } else {
                if (productDetails[i].sp) {
                    productPrice = roundUp(productDetails[i].sp)
                } else if (productDetails[i].p != 0) {
                    productPrice = productDetails[i].p
                }
            }
            itemList.push({
                "id": productDetails[i].sku,
                "name": productDetails[i].n,
                "list_name": listName,
                "brand": productDetails[i].b,
                "category": category,
                "variant": productDetails[i].dc,
                //"list_position": 1,
                //"quantity": 2,
                "price": productPrice
            })
        }
        if (itemList.length > 0) {
            gtag('event', 'view_item_list', {
                "event_category": "ecommerce",
                "items": itemList
            });
        }

    }
    /*let category=''
    if(categoryId)
    {
    category =await getCatPath(categoryId)
    }else{
    category ="search" 
    }
    if(category){ 
    window.dataLayer = window.dataLayer || [];
    window.dataLayer.push({
        'event':'productFilter',
        'eventCategory':category,
        'eventAction':action,
        'eventLabel':label,
        'eventValue':value
    });
}*/
    console.log("google analytics event category ", window.dataLayer);
}
export const googleAanalyticsCheckout = (action, options) => {

    let gtag = window.gtag ? window.gtag : null;
    if (gtag) {
        gtag('event', action, {
            ...options
        });
    }

    console.log("google analytics called ", action);
}
export const googleAanalyticsEventCategory = (action, category, categoryDetails) => {
    let gtag = window.gtag ? window.gtag : null;
    if (gtag) {
        gtag('event', action, {
            'event_category': category,
            'event_label': categoryDetails.name,
            'value': categoryDetails.id
        });
    }
    console.log("google analytics event called ", {
        'event_category': category,
        'event_label': categoryDetails.name,
        'value': categoryDetails.id
    });
}

export const listrakSubscribe = async (email) => {

    if (window._ltk) {
        window._ltk.Subscriber.List = "Footer";
        window._ltk.Subscriber.Email = email;
        // window._ltk.Subscriber.Profile.Add("CheckBox.Source.Product Registrations", "on");
        window._ltk.Subscriber.Submit();

    }
}

export const checkEncodeURI = (str) => {
    try {
        decodeURIComponent(escape(window.atob(str)));
        return true;
    } catch (e) {
        return false;
    }
}
export const priceFormatter = (price, pdp) => {
    if (price != undefined) {        
        price = price.toString();
        let decimals = (price.split("."))[1];
        if ((!Number(decimals) || isNaN(decimals)) || decimals.length == 1) //if 2 or 2.1
            return Number(price).toFixed(2);
        if (decimals.length == 2 && pdp) //if 2 or 2.1
            return price;
        
        else if (decimals.length > 1) // if 2.34 or 2.56565
        {
            return  price.toString().match(/^-?\d+(?:\.\d{0,2})?/)[0]
        } 
        // if 2.34 or 2.56565
        //    return Number(price.match(/^-?\d+(?:\.\d{0,4})?/)[0]);
    }
}



export const invalidPoBoxAddress = (address) => {
    let containedPoBox = false;
    let addressNew = address.toLowerCase();
    if (addressNew.search("po box") > -1)
        containedPoBox = true;
    else if (addressNew.search("pobox") > -1)
        containedPoBox = true;
    else if (addressNew.search("post office") > -1)
        containedPoBox = true;
    else if (addressNew.search("postoffice") > -1)
        containedPoBox = true;
    else if (addressNew.search("post office box") > -1)
        containedPoBox = true;
    else if (addressNew.search("postofficebox") > -1)
        containedPoBox = true;
    else if (addressNew.search("p.o.box") > -1)
        containedPoBox = true;
    else if (addressNew.search("p.o. box") > -1)
        containedPoBox = true;
    else if (addressNew.search("p. o. box") > -1)
        containedPoBox = true;
    else if (addressNew.search("p o box") > -1)
        containedPoBox = true;
    else
        containedPoBox = false;
    return containedPoBox;
}


export const getProductArray = (productData, categoryId) => {
    if (productData.allCategoryDetails) {
        let result = productData.allCategoryDetails.filter(element => {
            return element.id === categoryId;
        });
        if (result[0])
            return result[0].p;
        else return '';
    }
}
export const getProductsList = (productData, productArray) => {
    let productList = [];
    if (productData.products) {
        for (let i = 0; i < productArray.length; i++) {
            productData.products.filter(element => {
                if (element.sku === productArray[i]) {
                    productList.push(element);
                }
            });
        }
        return productList;
    }
}

/* eslint-disable */
export const checkPromotion = ({ sku, quantity, product, productPartsObjects }) => {
    for (let i = 0; i < promotions.length; i++) {
        let promotion = promotions[i];
        let rules = promotion.promotion_rule;
        promotion.appliedRules = [];
        promotion.exclusive = [];
        promotion.exclusiveRules = [];
        for (let m = 0; m < rules.length; m++) {
            let rule = rules[m];
            let conditions = rule.conditions;
            rule.allCondition = false;

            if (rule.rule_type == "exclusive")
                promotion.exclusive.push("true");

            rule.evaluateConditions = [];
            for (let j = 0; j < conditions.length; j++) {
                let condition = conditions[j];
                switch (condition.variable) {
                    case "product_sku":
                        rule.allCondition = evaluatePredicate(condition.predicate, (condition.value.toLowerCase()), sku.toLowerCase());
                        break;
                    case "product_tag":
                        let tags = condition.value.split(',');
                        if (product.tags) {
                            const found = tags.some(r => product.tags.indexOf(r) >= 0)
                            if (found)
                                rule.allCondition = true
                            else
                                rule.allCondition = false;
                        }
                        break;

                    case "quantity":
                        rule.allCondition = evaluatePredicate(condition.predicate, condition.value, quantity);

                        break;

                    case "Product_part_with_liner":
                        let partName = condition.sub_variable;
                        let objects = productPartsObjects.filter((obj) => obj.partName.toLowerCase() == partName.toLowerCase())[0];
                        if (objects && objects.linerObject && objects.linerObject.selectedLiner) {
                            rule.allCondition = true
                        }
                        else
                            rule.allCondition = false;
                        break;

                    case "count_of_product_part_press_passes":
                        let name = condition.sub_variable;
                        let partObjects = productPartsObjects.filter((obj) => obj.partName.toLowerCase() == name.toLowerCase())[0];
                        if (partObjects && partObjects.processes) {
                            let processes = partObjects.processes;
                            if (Object.keys(processes).length)
                                rule.allCondition = evaluatePredicate(condition.predicate, condition.value, processes[Object.keys(processes)[0]].passes);
                            else
                                rule.allCondition = evaluatePredicate(condition.predicate, condition.value, 0);;
                        }
                        else
                            rule.allCondition = false;
                        break;
                    case "count_of_product_press_passes":
                        let passes = 0;
                        let processesObject = {};
                        for (let k = 0; k < productPartsObjects.length; k++) {
                            let partObjects = productPartsObjects[k];
                            if (partObjects.processes) {
                                let processes = partObjects.processes;
                                for (const [key, value] of Object.entries(processes)) {
                                    if (!processesObject.hasOwnProperty(key)) {
                                        processesObject[key] = [];
                                    }
                                    for (let p = 0; p < value.colors.length; p++) {
                                        let color = value.colors[p];
                                        if (!processesObject[key].includes(color)) {
                                            passes = passes + 1;
                                            processesObject[key].push(color);
                                        }
                                    }
                                }
                            }

                        }
                        rule.allCondition = evaluatePredicate(condition.predicate, condition.value, passes);
                        break;
                }
                rule.evaluateConditions.push(rule.allCondition);
            }
            if (rule.evaluateConditions.length > 0 && !rule.evaluateConditions.includes(false)) {
                promotion.appliedRules.push(rule);
                promotion.applied = true;
                if (rule.rule_type == "exclusive") {
                    promotion.exclusiveRules.push("true");
                }

            }

        }


    }
    return promotions.filter(promotion => {
        return (promotion.applied === true && (promotion.exclusiveRules.length == promotion.exclusive.length))
    })[0];
}

export const evaluatePredicate = (operator, compareValue, value) => {
    let boolean = true;
    switch (operator) {
        case ">":
            if (Number(value) > Number(compareValue))
                boolean = true;
            else
                boolean = false
            break;
        case "<":
            if (Number(value) < Number(compareValue))
                boolean = true;
            else
                boolean = false
            break;
        case "<=":
            if (Number(value) <= Number(compareValue))
                boolean = true;
            else
                boolean = false
            break;
        case ">=":
            if (Number(value) >= Number(compareValue))
                boolean = true;
            else
                boolean = false
            break;
        case "==":
            if (Number(value) == Number(compareValue))
                boolean = true;
            else
                boolean = false
            break;

        case "=":
            if (Number(value) === Number(compareValue))
                boolean = true;
            else
                boolean = false
            break;

        case "IN":
            let values = (compareValue.toLowerCase()).split(',');
            if (values.includes(value.toLowerCase()))
                boolean = true;
            else
                boolean = false
            break;
    }
    return boolean;
}

export const setCategoryNameInLocal = async (categoryId, res) => {
    let categoryDetailsList = window.craneCatalog;
    let categoryOne = await getCategoryOne(
        categoryDetailsList.allCategoryDetails,
        Number(categoryId)
    );
    if (categoryOne && res) {
        window.$cookies.set(res.item_id, categoryOne.n + ':' + categoryId, '30d', null, getDomain(window.location.hostname));
    }
    console.log('category name ', res.item_id, categoryOne.n);
}
export const getName = (label) => {
    const filterList = [{ name: "brand", label: "b" }, { name: "color_parent", label: "dc" }, { name: "design_style", label: "ds" }, { name: "occasion", label: "o" }, { name: "paper_color_parent", label: "pc" }, { name: "paper_weight", label: "pw" }, { name: "personalized", label: "per" }
        , { name: "photo_card", label: "ph" },
    { name: "printing_process", label: "pm" }, { name: "product_def_type", label: "pt" }, { name: "uom", label: "u" }
    ];
    let name = filterList.filter((item) => item.label == label)
    if (name) {
        return name[0].name
    }

}
export const roundUp = (num) => {
    var with2Decimals = num.toString().match(/^-?\d+(?:\.\d{0,2})?/)[0];
    return with2Decimals;
}