
package com.tmerclub.cloud.api.product.feign;

import com.tmerclub.cloud.common.order.dto.DvyTypeDTO;
import com.tmerclub.cloud.common.order.vo.ShopCartItemVO;
import com.tmerclub.cloud.common.response.ServerResponseEntity;

import java.util.List;

/**
 * @author tmerclub
 * @date 2020/11/12
 */
public interface ShopCartFeignClient {

    /**
     * 获取购物项
     * @param shopCartItems 订单项\购物车项数据
     * @param dvyTypes 店铺物流类型
     * @param isShopCartOrder 是否从购物车提交的订单（注：不是购物车，是购物车提交的订单）
     * @return 购物项
     */
    List<ShopCartItemVO> handleShopCartItem(List<ShopCartItemVO> shopCartItems, List<DvyTypeDTO> dvyTypes, Boolean isShopCartOrder);

    /**
     * 获取购物项
     * @param addrId
     * @return 购物项
     */
    List<ShopCartItemVO> getCheckedShopCartItems(Long addrId, List<DvyTypeDTO> dvyTypes);

    /**
     * 通过购物车id删除用户购物车物品
     * @param shopCartItemIds 购物车id
     */
    void deleteItem(List<Long> shopCartItemIds);

    /**
     * 根据店铺id列表更新购物车店铺是否停业属性
     * @param shopIds
     * @param isClosed
     * @return
     */
    ServerResponseEntity<Void> updateIsClosedByShopIds(List<Long> shopIds, Integer isClosed);

    /**
     * 套餐发生变化时移除用户购物车项
     * @param comboIdList
     * @param spuId
     * @param skuId
     */
    void deleteCartByComboUpdate(List<Long> comboIdList, Long spuId, Long skuId);

    /**
     * 根据套餐id和套餐商品id集合移除用户购物车项
     * @param comboId
     * @param spuIdList
     * @return
     */
    ServerResponseEntity<Void> deleteCartByComboIdAndSpuIdS(Long comboId, List<Long> spuIdList);

    /**
     * 根据套餐id和套餐商品id集合移除用户购物车项
     * @param comboId
     * @param skuIdList
     */
    void deleteCartByComboIdAndSkuIdS(Long comboId, List<Long> skuIdList);

    /**
     * 修改用户购物车中的套餐商品价格
     * @param comboId
     * @param skuId
     * @param price
     * @return
     */
    ServerResponseEntity<Void> updateCartSpuPriceByComboIdAndSkuId(Long comboId, Long skuId, Long price);

    /**
     * 根据套餐主商品skuId获取搭配商品id
     * @param skuId
     * @return
     */
    ServerResponseEntity<List<Long>> skuIdListByComboMainSkuId(List<Long> skuId);

    /**
     * 套餐修改商品起搭数时异步修改以后购物车商品数量
     * @param comboId 套餐id
     * @param spuId 商品id
     * @param count 套餐商品起搭数量
     */
    void updateCartComboCount(Long comboId, Long spuId, Integer count);

    /**
     * 清空购物车
     * @param userId
     * @param shopCartItemIds
     */
    void deleteShopCartItemsByShopCartItemIds(Long userId, List<Long> shopCartItemIds);
}
