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

import com.tmerclub.cloud.api.product.vo.SkuStockVO;
import com.tmerclub.cloud.common.product.dto.StockPointSkuDTO;
import com.tmerclub.cloud.common.product.vo.StockPointSkuVO;
import com.tmerclub.cloud.common.product.vo.search.SpuAdminVO;
import com.tmerclub.cloud.common.response.ServerResponseEntity;

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

/**
 * @author xxw
 * @date 2022/11/17 15:24
 */
public interface SkuStockFeignClient {

    /**
     * 根据商品skuid和库存点获取库存点关联的商品库存
     * @param skuId
     * @param stockPointId
     * @return
     */
    ServerResponseEntity<Map<Long, Integer>> getStockMapBySkuIdAndStockPointIds(Long skuId, List<Long> stockPointId);

    /**
     * 获取sku库存Map(key：skuId_stockPointId)
     * @param skuStocks sku库存数据列表
     * @return sku库存Map(key：skuId_stockPointId)
     */
    Map<String, SkuStockVO> listSkuStock(List<SkuStockVO> skuStocks);

    /**
     * 修改sku库存
     * @param stockVOList sku库存VO
     */
    void changeSkuStock(List<SkuStockVO> stockVOList);

    /**
     * 检查库存点集合是否含有该sku集合
     * @param stockPointIds 库存点id集合
     * @param skuIds skuId集合
     * @return 包含的skuId集合
     */
    List<Long> checkStockPointContainSku(List<Long> stockPointIds, List<Long> skuIds);

    /**
     * 补充库存
     * @param spuId
     * @param stockPointSkuVOList
     * @return
     */
    ServerResponseEntity<Void> addAndUpdateStockPoint(Long spuId, List<StockPointSkuDTO> stockPointSkuVOList);
    /**
     * 根据skuIds获取sku信息
     * @param skuIds skuIds
     * @return sku信息
     */
    ServerResponseEntity<Map<Long, Integer>> calculateStockByComboSpuList(List<Long> skuIds);

    /**
     * 根据库存点id修改库存模式和库存
     * @param stockPointId
     * @param stockMode 库存模式 1 共享库存 2 独立库存
     * @param type 共享库存模式（1同步到默认仓库 2库存清零），只有切换成共享库存模式才有值
     * @return
     */
    ServerResponseEntity<Void> updateStockMode(Long stockPointId, Integer stockMode, Integer type);

    /**
     * 加载商品库存数量
     * @param productSearchList
     * @return
     */
    ServerResponseEntity<List<SpuAdminVO>> loadProdStock(List<SpuAdminVO> productSearchList);

    /**
     * 获取sku区域库存集合
     * @param productSearchList
     * @return
     */
    ServerResponseEntity<Map<String, SkuStockVO>> mapSkuPointStockByStockPoints(List<StockPointSkuVO> productSearchList);
}
