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

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.fzm.mall.server.admin.goods_center.entity.dto.*;
import com.fzm.mall.server.admin.goods_center.entity.vo.GoodsListVO;
import com.fzm.mall.server.admin.goods_center.entity.vo.GoodsSpuDetailVO;
import com.fzm.mall.server.admin.goods_center.entity.vo.GoodsSpuVO;
import com.fzm.mall.server.admin.goods_center.model.Spu;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

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

    /**
     * 新增商品
     *
     * @param pDTO       商品信息
     * @param merchantId 商户id
     * @param templateId 快递模板
     */
    void add(GoodsSpuDTO pDTO, String merchantId, String templateId, String addr);

    /**
     * 草稿商品
     *
     * @param pDTO       商品信息
     * @param merchantId 商户id
     */

    void draft(GoodsSpuDraftDTO pDTO, String merchantId);

    /**
     * 编辑商品
     *
     * @param eDTO       编辑信息
     * @param merchantId 商户id
     */
    void edit(GoodsEditDTO eDTO, String merchantId);

    /**
     * 重新发布
     *
     * @param eDTO       重新发布
     * @param merchantId 商户id
     */
    void republish(GoodsRepublishUpdateDTO eDTO, String merchantId);

    /**
     * 取消发布
     *
     * @param goodsId 商品id
     */
    void cancel(String goodsId);

    /**
     * 编辑状态
     *
     * @param goodsId 商品id
     * @param status  商品状态
     */
    void updateStatus(String goodsId, Integer status, String errMsg);

    /**
     * 分页查询商品
     *
     * @param merchantId  商户id
     * @param type        管理员归属
     * @param goodsId     系列id
     * @param status      状态
     * @param addTimeHead 添加时间头
     * @param addTimeTail 添加时间尾
     * @param goodsName   商品名称
     * @param pageNum     当前页数
     * @param pageSize    每页个数
     * @return 分页的商品信息
     */
    IPage<GoodsSpuVO> page(String merchantId, Integer type, String goodsId, String goodsName, Integer status, Long addTimeHead, Long addTimeTail, Integer goodsType,
                           Integer pageNum, Integer pageSize);

    /**
     * 根据商品id查询商品信息
     *
     * @param goodsId 商品id
     */
    Spu getByGoodsId(String goodsId);

    /**
     * 根据商品id查询商品信息
     *
     * @param goodsId 商品id
     */
    GoodsSpuDetailVO getVoByGoodsId(String goodsId);

    /**
     * 上下架商品
     *
     * @param goodsId 商品id
     * @param type    上下架类型
     */
    void offGoods(String goodsId, Integer type, Long preheatEndTime);

    /**
     * 批量删除商品
     *
     * @param goodsIds   商品id
     * @param merchantId 商户id
     */
    void deleteBatch(List<String> goodsIds, String merchantId);

    /**
     * 审核商品
     *
     * @param checkDTO 审核信息
     */
    void goodsCheck(GoodsCheckDTO checkDTO);

    /**
     * 批量审核商品
     *
     * @param checkDTOList 审核信息
     */
    void goodsCheckBatch(List<GoodsCheckDTO> checkDTOList);

    /**
     * 判断商品名称是否存在
     *
     * @param goodsName 商品名称
     */
    void goodsNameExist(String goodsName);

    /**
     * 根据类目查询对应商户商品
     *
     * @param categoryIds 类目ids
     * @param merchantId  商户id
     * @param goods       商品id或商品名
     * @return 商品列表
     */
    List<GoodsListVO> queryByCategory(List<String> categoryIds, String merchantId, String goods);

    /**
     * 根据商品编号或id查询商品信息
     *
     * @param merchantId 商户id
     * @param goods      商品id或商品名
     * @return 商品列表
     */
    List<GoodsListVO> queryByNameOrId(String merchantId, String goods);

    /**
     * 打包商品-根据商品编号或名称获取商品信息
     *
     * @param goodsInfo 商品编号或名称
     */
    List<GoodsListVO> getSpuByVague(String goodsInfo, String merchantId);

    List<Spu> listForPreheat();

}
