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.ext.BdWaresInfoExt;
import com.hzs.common.domain.sale.wares.BdWares;
import com.hzs.common.domain.sale.wares.BdWaresAuthority;
import com.hzs.common.domain.system.config.BdAgreement;
import com.hzs.common.domain.system.config.ext.BdRangeExt;
import com.hzs.sale.wares.param.ComputeWaresPrice;
import com.hzs.sale.wares.param.WaresParams;
import com.hzs.sale.wares.vo.RecommendWaresInfoVo;
import com.hzs.sale.wares.vo.WaresVo;
import com.hzs.system.sys.dto.LoginUser;
import org.apache.ibatis.annotations.Param;

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

/**
 * <p>
 * 商品 服务类
 * </p>
 *
 * @author hzs
 * @since 2022-09-08
 */
public interface IBdWaresService extends IService<BdWares> {

    /**
     * 新增商品基础信息
     *
     * @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);

    /**
     * 根据条件查询商品信息
     *
     * @param specialArea 专区
     * @param waresCode  商品编号
     * @return: List<BdWaresExt>
     * @Author: sui q
     * @Date: 2022/9/16 11:13
     */
    BdWaresExt queryWaresByCondition(Integer specialArea, String waresCode);

    /**
     * 根据条件查询商品，专区商品列表
     * @param specialArea 所属专区
     * @param pkAreaClassify 所属分类
     * @param waresName 名称
     * @param pkCountry 所属国家
     * @return: List<BdWaresExt>
    * @Author: sui q
    * @Date: 2022/9/19 9:05
    */
    List<BdWaresExt> queryWaresByCondition(Integer specialArea, Integer pkAreaClassify,String waresName,Integer pkCountry);

    /**
     * 根据条件查询商品，专区商品列表
     * @param specialArea 所属专区
     * @param pkAreaClassify 所属分类
     * @param waresName 名称
     * @param pkCountry 所属国家
     * @return: List<BdWaresExt>
     * @Author: sui q
     * @Date: 2022/9/19 9:05
     */
    List<BdWaresExt> queryOverWaresByCondition(Integer specialArea, Integer pkAreaClassify,String waresName,Integer pkCountry);

    /**
     * 根据条件查询推荐商品 ，专区商品列表
     * @param specialArea 所属专区
     * @param pkAreaClassify 所属分类
     * @param waresName 名称
     * @param pkCountry 所属国家
     * @return: List<BdWaresExt>
     * @Author: sui q
     * @Date: 2022/9/19 9:05
     */
    List<BdWaresExt> queryRecommendWaresByCondition(Integer specialArea, Integer pkAreaClassify,String waresName,Integer pkCountry);
    /**
     * 根据条件查询商品，专区商品列表
     * @return: List<BdWaresExt>
     * @Author: sui q
     * @Date: 2022/9/19 9:05
     */
    List<BdWaresExt> queryWaresByCondition();

    /**
     * 查询商品外键
     * @param waresId
     */
    BdWares getWares(Integer waresId);
    /**
     * 查询最末商品编号
     * @return
     */
    String getLastWaresCode();

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

    /**
     * 上移 下移
     * @param waresId
     * @param waresMoveType
     */
    void waresMove(Integer waresId, Integer waresMoveType);


    Integer selectByMoveDownSort(Integer waresId);

    void floatingRoof(Integer waresId);

    /**
     * 新增商品记录添加审核
     * @param wares
     * @param loginUser
     * @param modifyRecordTypeValue 类型
     */
    void saveWaresModifyRecord(WaresParams wares, LoginUser loginUser,Integer modifyRecordTypeValue);
    /**
     * 修改商品记录添加审核
     * @param waresParams
     * @param loginUser
     */
    void updateWaresModifyRecord(WaresParams waresParams, LoginUser loginUser);


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

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

    /**
     * 查询存在推荐的专区
     * @return
     */
    List<Integer> queryRecommendWaresSpecialAndWaresInfo();

    /**
     * 查询推荐商品信息
     */
    RecommendWaresInfoVo queryRecommendInfo(Integer pkCountry,String memberCode,Map<Integer, Boolean> waresShowMap);
    /**
     * 修改自动上下架状态（自动上架）
     * @param currentTime 当前时间
     */
    void updateByAutoStartAndAutoStart(Date currentTime);
    /**
     * 修改自动上下架状态（自动下架）
     * @param currentTime 当前时间
     */
    void updateByAutoStartAndAutoEnd(Date currentTime);

    /**
     * 查询推荐商品
     * @param specialArea
     * @return
     */
    List<BdWares> queryRecommnedWares(Integer specialArea);

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

    /**
     * 计算商品业绩
     */
    List<ComputeWaresPrice> computeWaresPrice(List<ComputeWaresPrice> computeWaresPriceList, List<BdRangeExt> rangeList);
    /**
     * 查询商品团队信息
     *
     * @return
     */
     Map<Integer, List<BdWaresAuthority>>  getWaresAuthority(List<Integer> pkWaresList);

    /**
     * 查询推荐商品
     * @param specialArea
     * @param isRecommend
     * @param pkCountry
     * @return
     */
    List<BdWares> queryByRecommendList(Integer  specialArea, Integer isRecommend, Integer pkCountry,Map<Integer, Boolean> waresShowMap);


    /**
     * 根据专区查询商品的ID信息
     *
     * @param specialArea 专区
     * @param pkCountry   国家ID
     * @return
     */
    BdWaresInfoExt selectWaresBySpecial(Integer specialArea, Integer pkCountry);
}
