package com.fzm.mall.server.admin.goods_center.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.fzm.mall.server.admin.goods_center.entity.dto.GoodsSkuDTO;
import com.fzm.mall.server.admin.goods_center.entity.vo.GoodsPackageSkuVO;
import com.fzm.mall.server.admin.goods_center.entity.vo.GoodsSkuVO;
import com.fzm.mall.server.admin.goods_center.model.Sku;
import com.fzm.mall.server.admin.order.model.OrderDetail;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * @author wangp
 * @date 2021/3/4 16:06
 * @description 商品规格表 服务类
 * @since JDK 1.8
 */
public interface ISkuService extends IService<Sku> {

    /**
     * 新增商品规格
     *
     * @param kDTOs         商品规格信息
     * @param goodsId       商品id
     * @param goodsName     商品名称
     * @param merchantId    商户id
     * @param commodityPass 商品通证
     */
    void add(List<GoodsSkuDTO> kDTOs, String goodsId, String goodsName, String merchantId, String addr, Integer commodityPass, String thumb, Integer pDTOType, Integer salesType, BigDecimal blindBoxPrice, BigDecimal price);

    /**
     * 新增商品规格
     *
     * @param kDTOs   商品规格信息
     * @param goodsId 商品id
     */
    void draft(List<GoodsSkuDTO> kDTOs, String goodsId);

    /**
     * 编辑商品规格
     *
     * @param kDTOs         商品规格信息
     * @param goodsId       商品id
     * @param merchantId    商户id
     * @param commodityPass 商品通证
     */
    void edit(List<GoodsSkuDTO> kDTOs, String goodsId, String merchantId, Integer commodityPass);

    /**
     * 编辑商品规格
     *
     * @param kDTOs         商品规格信息
     * @param goodsId       商品id
     * @param merchantId    商户id
     * @param commodityPass 商品通证
     */
    void republish(List<GoodsSkuDTO> kDTOs, String goodsId, String name, String merchantId, Integer commodityPass, Integer pDTOType);

    /**
     * 编辑货币发行量
     *
     * @param skuId 规格id
     * @param num   变动数量
     */
    void updateCirculation(String skuId, Integer num);

    /**
     * 更新状态
     *
     * @param skuId  规格id
     * @param status 状态
     * @param errMsg 失败原因
     */
    void updateStatus(String skuId, Integer status, String errMsg);

    /**
     * @param goodsId 商品id
     * @return 最大最小值
     */
    Map<String, Object> getMaxAndMinPrice(String goodsId);

    /**
     * 根据商品id查询规格信息
     *
     * @param goodsId 商品id
     * @return 规格列表
     */
    List<GoodsSkuVO> getByGoodsId(String goodsId);

    /**
     * 统计库存和销量
     *
     * @param goodsId 商品id
     * @return 统计结果
     */
    Map<String, Object> getStockAndSalesSum(String goodsId);


    /**
     * 商品订单退款-库存还原
     */
    void restoreInventory(List<OrderDetail> orderDetailList);

    /**
     * 根据规格编号获取商品规格
     *
     * @param skuId 规格编号
     */
    Sku getBySkuId(String skuId);

    /**
     * 打包商品-根据商品编号获取商品规格
     *
     * @param goodsId 商品编号
     */
    List<GoodsPackageSkuVO> getSkuByGoodsIdForPackage(String goodsId);

    Sku getByCoin(String coin);

    void removeByGoodsId(String goodsId);

}
