const PromotionDetail = (props) => {

    const { promo, setBaskets,mainItemCode, config,scrollToFirstPage, member } = props;

    const [selectedItem, setSelectedItem] = useState([]);// list item_code 
    const [productsRef, setProuductsRef] = useState([])
    const [loading, setLoading] = useState(false)
    let captionApply =   config?.lang=='vi'?"Áp dụng khuyến mãi":"Apply promotion" 
    let disableApply = false
    if (promo?.apply_for_branch!=0){ 
        if (config?.branch_no!=promo?.apply_for_branch){
            disableApply=true
        }
        captionApply =   config?.lang=='vi'?"Áp dụng khuyến mãi (Chỉ dành cho online)":"Apply promotion (Only for online)" 
    }else if(promo?.condition_value=='45'){ 
        
        if (!member){
                disableApply=true
            }
            captionApply =  config?.lang=='vi'?"Áp dụng khuyến mãi (Chỉ dành cho member)":"Apply promotion (Only for member)" 
        }
        // Kiểm tra kiểu khuyến mãi
        const handleItemChange = (itemId) => {     
            setSelectedItem([itemId])     
        };

    const findIdsSelected =(objPromo)=>{            
        const divPromo = objPromo.target.closest('.div_promo'); // Lấy phần tử cha gần nhất có class 'div_promo'
        let arr=[]
            if (divPromo) {
                // Tìm tất cả các radio button được chọn bên trong divPromo
                const checkedRadios = divPromo.querySelectorAll('input[type="radio"]:checked');
                // Chuyển đổi NodeList thành mảng nếu cần
                const checkedRadioArray = Array.from(checkedRadios);
                // Xử lý các radio button đã chọn
                checkedRadioArray.forEach(radio => {
                    if ( arr.includes (radio?.getAttribute('data_item_code')) ==false){
                        arr.push(radio?.getAttribute('data_item_code'))
                    } 
                    //console.log(radio.getAttribute('data_id')); // Ví dụ: in ra data_id của radio button đã chọn
                });
            }
            return arr;
    }
    
    const fetchProductReference = async (items) => {
        try {  
            if (config==null){  
                return
            }
            setLoading(true)   
            const url =`/api/get-mdc-product-reference`
            const dataRequest = {
                item_codes: items
            }
            const resultObj = await commonApi.APIPOSTByURL(url, dataRequest, config)           
            if (resultObj.status == 200){                
                setProuductsRef(resultObj.data);   
            }    

        } catch (e) {
            console.log("ERROR get-product-info" )
        }finally{
            setLoading(false)
        }
    };
    
    if (promo.type === "buy_a_group_of_items_get_a_group_discounted") {      
          
        useEffect(()=>{
        const itemIds  = discountGroup?.items?.map(item => item.id) || [];
            if (itemIds?.length >0){
                fetchProductReference(itemIds)
            }               
        },[])

        const mainGroup = promo.conditions.rules.find(group =>  group?.items.some(item => item.id === mainItemCode)); // chứa sản phẩm đang được chọn   
        const discountGroup = promo.conditions.rules.find(rule => rule.group != mainGroup?.group);
        if (discountGroup?.items?.length > 0) {
            const newItemId = discountGroup?.items[0].id;
            if (!selectedItem.includes(newItemId)) {
                setSelectedItem(prev => [...prev, newItemId]);
            }
        }
       
        const applyPromotion = (objPromo) => {
            const itemsToAdd = [];            
            // Thêm sản phẩm nhóm chính vào giỏ hàng
            if (mainGroup) {
                const mainItem = mainGroup?.items?.find(obj =>obj.id==mainItemCode);
                itemsToAdd.push({
                    item_code: mainItem.id,
                    qty: mainGroup.quantity,
                    normal_price: mainItem.normal_price,
                    promotion_price: mainItem.promotion_price,
                });
            }            
            const selectedItems = findIdsSelected(objPromo)
            // Thêm sản phẩm nhóm khuyến mãi vào giỏ hàng
            if (discountGroup) {
                discountGroup?.items?.filter(obj=>selectedItems.includes(obj.id)).forEach(item => {
                itemsToAdd.push({
                        item_code: item.id,
                        qty: discountGroup.quantity,
                        normal_price: item.normal_price,
                        promotion_price: item.promotion_price,
                    });
                });
            }

            // Cập nhật giỏ hàng
            
            setBaskets(prevBaskets => {
                const currentBaskets = prevBaskets || { items: [] };
                const items = [...currentBaskets.items];
                itemsToAdd.forEach(newItem => {
                    const existingItemIndex = items?.findIndex(item => item.item_code === newItem.item_code);
                    if (existingItemIndex !== -1) {
                        // Nếu tồn tại, cập nhật số lượng                        
                        items[existingItemIndex].qty = Math.max(items[existingItemIndex].qty, newItem.qty);
                    } else {
                        // Nếu không tồn tại, thêm mới
                        items.push(newItem);
                    }
                });
                return { 
                    ...currentBaskets, 
                    items: items
                };
            });
            if (scrollToFirstPage){
                scrollToFirstPage()
            }
        };
        
        return (
           <div className="div_promo" style={{fontSize:13}}>              
                <p>{promo?.promotion_scheme_custom?.map(scheme => scheme.promotion_scheme_vi).join(', ')}</p>
                <h6>{config?.lang=='vi'?"Chọn sản phẩm khuyến mãi:":"Select promotional products:"} </h6>
                {discountGroup?.items?.map((item, index) => (
                    <div key={item.id}>
                        <label>
                            <input
                                data_item_code = {item?.id}
                                type="radio"
                                name={`"promotionItem_${promo.code}_${mainItemCode}}`} // Đặt tên giống nhau để nhóm các radio button
                                checked={selectedItem.includes(item?.id) || index==0}
                                onChange={() => handleItemChange(item.id)}
                            />
                            {item.id} - Giá: {commonFunc.formatNumber (item.promotion_price)}  ({productsRef?.find(obj=> obj.item_code==item?.id)?.Short_Description_VI || productsRef?.find(obj=> obj.item_code==item?.id)?.description }) 
                        </label>
                    </div>
                ))}
             
                <ButtonCtl
                    label={<i class="fa fa-arrow-circle-o-right" style={{paddingRight:4}} aria-hidden="true">{captionApply}</i>}
                    onClick={(e)=>applyPromotion(e)}
                    variant='success'
                    type='button'
                    style={{}} disabled={disableApply}
                    />
            </div>
        );
    }else if (promo?.type === 'fixed_price_for_group_of_items') { // là combo nên không có nhóm chính, đạt đủ combo mới tính khuyến mãi        
        const mainGroup = promo.conditions.rules.find(group =>  group.items?.some(item => item.id === mainItemCode)); // chứa sản phẩm đang được chọn
        const mainGroupNo = mainGroup?.group        
        const anotherGroups = promo?.conditions?.rules?.filter(obj => obj.group != mainGroupNo)
        useEffect(()=>{            
            const itemIds  = [...new Set(anotherGroups?.flatMap(rule => rule.items?.map(item => item.id)))];
            if (itemIds?.length >0){                
                fetchProductReference(itemIds)
            }
        },[])
        const applyPromotion = (objPromo) => {            
            const itemsToAdd = [];
            const mainItem = mainGroup?.items?.find(obj =>obj.id==mainItemCode);
            
            itemsToAdd.push({
                item_code: mainItemCode,
                qty: mainGroup.quantity,
                normal_price: mainItem.normal_price,
                promotion_price: promo.conditions.value, // Giá cố định cho nhóm
            });
            // Thêm sản phầm của từng nhóm khác vào basket
            const selectedItems = findIdsSelected(objPromo)
            if (anotherGroups?.length>0) {
                for (var i =0; i< anotherGroups?.length; i++){
                    const {group, items, quantity} = anotherGroups[i]
                    items?.filter(obj=>selectedItems.includes(obj.id)).forEach(item => {
                    itemsToAdd.push({
                            item_code: item.id,
                            qty: quantity,
                            normal_price: item.normal_price,
                            promotion_price: item.promotion_price,
                        });
                });
                }                
            }
            
            setBaskets(prevBaskets => {
                const currentBaskets = prevBaskets || { items: [] };
                const items = [...currentBaskets.items];
                itemsToAdd.forEach(newItem => {
                    const existingItemIndex = items?.findIndex(item => item.item_code === newItem.item_code);
                    if (existingItemIndex !== -1) {
                        // Nếu tồn tại, cập nhật số lượng                        
                        items[existingItemIndex].qty = Math.max(items[existingItemIndex].qty, newItem.qty);
                    } else {
                        // Nếu không tồn tại, thêm mới
                        items.push(newItem);
                    }
                });
                return { 
                    ...currentBaskets, 
                    items: items
                };
            });
            if (scrollToFirstPage){
                scrollToFirstPage()
            }
        };
        return (
            <div className="div_promo">            
                <p>{promo?.promotion_scheme_custom?.map(scheme => scheme.promotion_scheme_vi).join(', ')} </p>          
                <h6> {config?.lang=='vi'?"Chọn sản phẩm cho combo khuyến mãi:":"Select promotional combo products:"}</h6>
                {anotherGroups.filter(obj=>obj.group !=mainGroupNo)?.map(group => (
                    <div key={group.id} style={{ marginBottom: '20px' }}>
                        <h5>{"Group: " + group?.group}</h5>
                        {group?.items?.map((item, index)=> (
                            <label key={item.id} style={{ display: 'block', marginBottom: '10px' }}>
                                <input
                                    data_item_code = {item?.id}
                                    type="radio"
                                    name={`"promotionItem_${promo.code}_${mainItemCode}}_${group?.id}`} // Đặt tên giống nhau để nhóm các radio button
                                    checked={selectedItem.includes(item?.id) || index==0}
                                    onChange={() => handleItemChange(item.id)}
                                />
                                <span>
                                    {item.id} - Giá: {commonFunc.formatNumber(item.promotion_price)} 
                                    {
                                        config?.lang=='vi'?
                                        <>
                                            (
                                            {productsRef?.find(obj => obj.item_code === item?.id)?.Short_Description_VI || 
                                            productsRef?.find(obj => obj.item_code === item?.id)?.description}
                                            )
                                        </>:
                                        <>
                                            (
                                            {productsRef?.find(obj => obj.item_code === item?.id)?.Short_Description_EN || 
                                            productsRef?.find(obj => obj.item_code === item?.id)?.Short_Description_VI || 
                                            productsRef?.find(obj => obj.item_code === item?.id)?.description}
                                            )
                                        </>
                                    }
                                    
                                </span>
                            </label>
                        ))}
                    </div>
                ))}
                <ButtonCtl
                    label={<i class="fa fa-arrow-circle-o-right" style={{paddingRight:4}} aria-hidden="true">{captionApply}</i>}
                    onClick={(e)=>applyPromotion(e)}
                    variant='success'
                    type='button'
                    style={{}} disabled={disableApply}
                    />
            </div>
        );
    }else if (promo?.type === 'lowest_priced_item_discount') {
        
        const rule = promo.conditions.rules; // Lấy nhóm đầu tiên
        const applyPromotion = (objPromo) => {
            
            const itemsToAdd = [];            
            const mainItem = promo.conditions.items?.find(obj => obj.id==mainItemCode);
            itemsToAdd.push({
                item_code: mainItemCode,
                qty: rule.quantity!=rule.discount_quantity? rule.quantity/rule.discount_quantity: rule.quantity,
                normal_price: mainItem.normal_price,
                promotion_price: promo.conditions.value, // Giá cố định cho nhóm
            });

            // Cập nhật giỏ hàng
            
           setBaskets(prevBaskets => {
                // Kiểm tra nếu prevBaskets là null, khởi tạo với giá trị mặc định
                const currentBaskets = prevBaskets || { items: [] };
                const items = [...currentBaskets.items];
                const existingItemIndex = items.findIndex(item => item.item_code === mainItem.id);

                if (existingItemIndex !== -1) {
                    // Nếu tồn tại, cập nhật số lượng
                    items[existingItemIndex].qty = Math.max(items[existingItemIndex].qty, rule.quantity);
                } else {
                    // Nếu không tồn tại, thêm mới
                    items.push(...itemsToAdd);
                }

                return { 
                    ...currentBaskets, 
                    items: items
                };
            });
            if (scrollToFirstPage){
                scrollToFirstPage()
            }
        };

        return (
            <div>               
                <p>{promo?.promotion_scheme_custom?.map(scheme => scheme.promotion_scheme_vi).join(', ')}</p>
                <h6>{config?.lang=='vi'?"Thêm":" Add"} {rule.quantity} {config?.lang=='vi'?" sản phẩm vào giỏ hàng để áp dụng khuyến mãi.":" products to apply promotion"}</h6>
                <ButtonCtl
                    label={<i class="fa fa-arrow-circle-o-right" style={{paddingRight:4}} aria-hidden="true">{captionApply}</i>}
                    onClick={(e)=>applyPromotion(e)}
                    variant='success'
                    type='button'
                    style={{}} disabled={disableApply}
                    />
            </div>
        );
    }else if (promo?.type === 'fixed_price_per_item') {
        
        const rule = promo.conditions.rules; // Lấy nhóm đầu tiên
        const applyPromotion = (objPromo) => {
            
            const itemsToAdd = [];            
            const mainItem = promo.conditions.items?.find(obj => obj.id==mainItemCode);
            itemsToAdd.push({
                item_code: mainItemCode,
                qty: rule.quantity,
                normal_price: mainItem.normal_price,
                promotion_price: rule.value, // Giá cố định cho sản phẩm
            });

            // Cập nhật giỏ hàng
            
           setBaskets(prevBaskets => {
                // Kiểm tra nếu prevBaskets là null, khởi tạo với giá trị mặc định
                const currentBaskets = prevBaskets || { items: [] };
                const items = [...currentBaskets.items];
                const existingItemIndex = items.findIndex(item => item.item_code === mainItem.id);

                if (existingItemIndex !== -1) {
                    // Nếu tồn tại, cập nhật số lượng
                    items[existingItemIndex].qty = Math.max(items[existingItemIndex].qty, rule.quantity);
                } else {
                    // Nếu không tồn tại, thêm mới
                    items.push(...itemsToAdd);
                }

                return { 
                    ...currentBaskets, 
                    items: items
                };
            });
            if (scrollToFirstPage){
                scrollToFirstPage()
            }
        };

        return (
            <div>               
                <p>{promo?.promotion_scheme_custom?.map(scheme => scheme.promotion_scheme_vi).join(', ')}</p>
                <h6>{config?.lang=='vi'?"Thêm":" Add"} {rule.quantity} {config?.lang=='vi'?" sản phẩm vào giỏ hàng để áp dụng khuyến mãi.":" products to apply promotion"}</h6>
                <ButtonCtl
                    label={<i class="fa fa-arrow-circle-o-right" style={{paddingRight:4}} aria-hidden="true">{captionApply}</i>}
                    onClick={(e)=>applyPromotion(e)}
                    variant='success'
                    type='button'
                    style={{}} disabled={disableApply}
                    />
            </div>
        );
    }

    return (
        <>
        </>
    )
};
