import { coloredToast } from '@/lib/toast';

interface Product {
    product_sku: string;
    product_title: string;
    product_images: [];
    product_sort_description: string;
    product_meta_description: string;
    product_is_new: boolean;
    product_is_purchasable: boolean;
    product_is_coming_soon: boolean;
    product_is_pre_order: boolean;
    product_pre_order_text: string;
    product_status: string;
    product_reg_price: number;
    product_sale_price: number;
    product_sold_count: number;
    product_search_count: number;
    product_view_count: number;
    product_qty: number;
    product_details: [];
    product_items: [];
    product_categories: [];
    product_tags: [];
    product_show_last_change: boolean;
    product_input_by: string;
    product_edited_by?: string;
    product_is_sni: boolean;
    product_show_in_page: boolean;
    product_is_searchable: boolean;
    product_link: string;
    product_variation_default_image: string;
    product_wedding_text_preview: string;
}

export const SaveProduct = (productForm: Product) => {
    const validationError = validateInput(productForm);

    if (validationError) {
        coloredToast('warning', validationError);
        return { status: false };
    }

    return {
        status: true,
        productForm,
    };
};
const validateInput = (productForm: Product): string | null => {
    if (!productForm.product_sku) {
        return 'Product SKU is required.';
    }
    if (!productForm.product_title) {
        return 'Product Title is required.';
    }
    if (!productForm.product_reg_price) {
        return 'Product Regular Price is required.';
    }

    if (productForm.product_reg_price < productForm.product_sale_price) {
        return 'Regular price cannot less then sale price';
    }
    if (productForm.product_images.length <= 0) {
        return 'Please add at least 1 image to proceed';
    }

    if (productForm.product_items.length > 0) {
        const checkProductItem = productForm.product_items.map((item: any) => {
            if (item.attributes.length <= 0) {
                return {
                    status: false,
                    message: 'Please add at least 1 attribute',
                };
            }

            // Iterate through each attribute
            for (const key in item.attributes) {
                if (item.attributes.hasOwnProperty(key)) {
                    const attribute = item.attributes[key];
                    if (attribute.value === '') {
                        return {
                            status: false,
                            message: 'Attribute value cannot be empty',
                        };
                    }
                }
            }

            if (parseInt(item.reg_price) < parseInt(item.sale_price)) {
                return {
                    status: false,
                    message: 'Regular Price cannot less then sale price in variation item',
                };
            }

            return { status: true, message: '' };
        });

        const hasErrorItem = checkProductItem.filter((item: any) => item.status === false);

        if (hasErrorItem.length > 0) {
            return hasErrorItem[0].message;
        }

        const hasDuplicates = hasDuplicateAttributes(productForm.product_items);
        if (hasDuplicates) {
            return 'You have duplicate same variation, check your variation';
        }
    }

    return null;
};

function hasDuplicateAttributes(productItems: any) {
    const seenCombinations = new Set();

    for (const item of productItems) {
        const attributes = item.attributes.map((attr: any) => JSON.stringify(attr.value));
        const combinationString = attributes.sort().join(',');

        if (seenCombinations.has(combinationString)) {
            return true; // Found a duplicate combination
        }

        seenCombinations.add(combinationString);
    }

    return false; // No duplicate combinations found
}
