package co.yixiang.yshop.module.cart.service.storecart;

import co.yixiang.yshop.module.cart.dal.dataobject.storecart.StoreCartDO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
 * 购物车 Service 接口
 *
 * @author yshop
 */
public interface AppStoreCartService extends IService<StoreCartDO> {


    /**
     * 返回当前用户购物车总数量
     * @param uid 用户id
     * @return int
     */
    int getUserCartNum(Long uid);

    /**
     * 添加购物车
     * @param uid  用户id
     * @param productId 普通产品编号
     * @param cartNum  购物车数量
     * @param productAttrUnique 属性唯一值
     * @param isNew 1 加入购物车直接购买  0 加入购物车
     * @param combinationId 拼团id
     * @param seckillId  秒杀id
     * @param bargainId  砍价id
     * @return 购物车id
     */
    long addCart(Long uid,Long productId,Integer cartNum, String productAttrUnique,
                 Integer isNew,Long combinationId,Long seckillId,Long bargainId);


    /**
     * 检测商品/秒杀/砍价/拼团库存
     * @param uid  用户ID
     * @param productId  产品ID
     * @param cartNum 购买数量
     * @param productAttrUnique  商品属性Unique
     */
    void checkProductStock(Long uid, Long productId, Integer cartNum, String productAttrUnique);




    /**
     * 购物车列表
     * @param uid 用户id
     * @param cartIds 购物车id，多个逗号隔开
     * @param status 0-购购物车列表
     * @return map valid-有效购物车 invalid-失效购物车
     */
    Map<String,Object> getUserProductCartList(Long uid, String cartIds, Integer status);

    /**
     * 改购物车数量
     * @param cartId 购物车id
     * @param cartNum 数量
     * @param uid uid
     */
    void changeUserCartNum(Long cartId,int cartNum,Long uid);

    /**
     * 删除购物车
     * @param uid uid
     * @param ids 购物车id集合
     */
    void removeUserCart(Long uid, List<String> ids);

    /**
     * 修改购物车支付状态
     * @param cartIds
     */
    void updateCartPayStatus(List<String> cartIds);

}
