package com.hzs.sale.wares.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.hzs.common.domain.sale.ext.BdWaresExt;
import com.hzs.common.domain.sale.wares.BdWares;
import com.hzs.common.domain.sale.wares.BdWaresAuthority;
import com.hzs.common.domain.sale.wares.BdWaresDetail;
import com.hzs.common.domain.system.config.BdAgreement;
import com.hzs.common.domain.system.config.ext.BdRangeExt;
import com.hzs.retail.wares.param.RetailWaresParam;
import com.hzs.sale.wares.param.ComputeWaresPrice;
import com.hzs.sale.wares.param.WaresParams;
import com.hzs.sale.wares.vo.WaresAuthorityVo;
import com.hzs.sale.wares.vo.WaresVo;
import com.hzs.system.sys.dto.LoginUser;

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

/**
 * 商品 服务类
 */
public interface IBdWaresService extends IService<BdWares> {

    /**
     * 获取最大排序值
     * @return
     */
    int getMaxSortNum();
    /**
     * 新增商品基础信息
     *
     * @param wares 商品
     * @param user  登录用户
     */
    BdWares saveWares(WaresParams wares, LoginUser user);

    /**
     * 修改商品基础信息
     *
     * @param waresParams 商品参数
     * @param loginUser   登录用户
     */
    void updateWares(WaresParams waresParams, LoginUser loginUser);

    /**
     * 删除商品基础信息
     *
     * @param pkId 主键
     */
    void removeWares(Integer pkId, LoginUser loginUser);

    /**
     * 根据条件查询商品，专区商品列表
     *
     * @param specialArea        所属专区
     * @param pkAreaClassify     所属分类 -- 可为null
     * @param waresName          名称 -- 可为null
     * @param waresCodeInList    包含的商品编号列表 -- 可为null
     * @param waresCodeNotInList 不包含的商品编号列表 -- 可为null
     * @param pkCountry          所属国家
     */
    List<BdWaresExt> queryWaresByCondition(Integer specialArea,
                                           Integer pkAreaClassify,
                                           String waresName,
                                           List<String> waresCodeInList,
                                           List<String> waresCodeNotInList,
                                           Integer pkCountry);

    /**
     * 根据条件查询推荐商品 ，专区商品列表
     *
     * @param specialArea    所属专区
     * @param pkAreaClassify 所属分类
     * @param waresName      名称
     * @param pkCountry      所属国家
     */
    List<BdWaresExt> queryRecommendWaresByCondition(Integer specialArea, Integer pkAreaClassify, String waresName, Integer pkCountry);

    /**
     * 查询商品外键
     *
     * @param waresId
     */
    BdWares getWares(Integer waresId);

    /**
     * 查询最末商品编号
     *
     * @return
     */
    String getLastWaresCode();

    /**
     * 查询商品信息
     *
     * @param waresParams
     * @return
     */
    List<WaresVo> selectByWaresInfo(WaresParams waresParams);

    /**
     * 上移 下移
     *
     * @param waresId
     * @param waresMoveType
     * @param specialArea   所属专区
     */
    void waresMove(Integer waresId, Integer waresMoveType, LoginUser loginUser, Integer specialArea);


    Integer selectByMoveDownSort(Integer waresId, Integer specialArea);

    /**
     * 置顶
     *
     * @param waresId
     * @param loginUser
     */
    void floatingRoof(Integer waresId, LoginUser loginUser);

    /**
     * 获取最大商品序号
     *
     * @return
     */
    Integer getMaxSort(Integer pkCountry);

    /**
     * 根据商品编号查询商品信息
     *
     * @param waresCodeList
     * @return
     */
    List<BdAgreement> selectByWaresCodeList(List<String> waresCodeList);

    /**
     * 修改自动上下架状态（自动上架）
     *
     * @param currentTime 当前时间
     */
    void updateByAutoStartAndAutoStart(Date currentTime);

    /**
     * 修改商品预售状态
     **/
    void waresPreSale();

    /**
     * 修改自动上下架状态（自动下架）
     *
     * @param currentTime 当前时间
     */
    void updateByAutoStartAndAutoEnd(Date currentTime);

    /**
     * 计算商品业绩
     */
    List<ComputeWaresPrice> computeWaresPrice(List<ComputeWaresPrice> computeWaresPriceList, Integer specialArea);

    /**
     * 计算商品业绩
     */
    List<ComputeWaresPrice> computeWaresPrice(List<ComputeWaresPrice> computeWaresPriceList, List<BdRangeExt> rangeList);

    /**
     * 查询商品团队信息
     *
     * @return
     */
    Map<Integer, List<BdWaresAuthority>> getWaresAuthority(List<Integer> pkWaresList);

    /**
     * 查询商品可见类型
     *
     * @param pkWares
     * @return
     */
    WaresAuthorityVo getWaresAuthorityFirst(Integer pkWares);

    /**
     * 置底
     *
     * @param waresId
     * @param loginUser
     */
    void bottomUp(Integer waresId, LoginUser loginUser);

    /**
     * 新零售查询商品列表
     *
     * @param param 查询参数
     * @return
     */
    List<BdWaresExt> listRetailWaresByCondition(RetailWaresParam param);

    /**
     * 查询盒数商品列表
     *
     * @param boxWaresList 盒数商品列表
     * @param pkProduct    查询的产品ID
     * @param specialArea  所属专区
     * @return
     */
    List<BdWaresDetail> listBoxProductAndWares(List<String> boxWaresList, Integer pkProduct, Integer specialArea);

}
