package com.snack.server.module.cart.service;

import com.snack.server.module.cart.dto.req.CartAddReq;
import com.snack.server.module.cart.dto.req.CartUpdateReq;
import com.snack.server.module.cart.entity.Cart;
import com.snack.server.module.cart.vo.CartVO;

import java.util.Collection;
import java.util.List;

/**
 * 购物车业务接口
 */
public interface CartService {

    /**
     * 获取当前用户的购物车（含统计）
     */
    CartVO getCurrentCart();

    /**
     * 添加商品到购物车（已存在则累加数量）
     */
    void addItem(CartAddReq req);

    /**
     * 修改购物车某项数量
     */
    void updateQuantity(CartUpdateReq req);

    /**
     * 切换选中状态
     */
    void updateSelected(Long skuId, Integer selected);

    /**
     * 全选 / 全不选
     */
    void updateAllSelected(Integer selected);

    /**
     * 删除购物车项
     */
    void deleteItem(Long skuId);

    /**
     * 批量删除（按 SKU ID 列表）
     */
    void deleteItems(Collection<Long> skuIds);

    /**
     * 清空购物车
     */
    void clear();

    /**
     * 内部：获取当前用户已选中的购物车项（订单提交时使用）
     */
    List<Cart> listSelectedItems();

    /**
     * 内部：删除已选中的购物车项（订单创建成功后调用）
     */
    void deleteSelectedItems();

    /**
     * 内部：获取购物车项数量（角标）
     */
    int countByUserId(Long userId);
}
