package com.hzs.sale.product.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.hzs.common.domain.sale.ext.BdProductExt;
import com.hzs.common.domain.sale.product.BdProduct;
import com.hzs.common.domain.sale.product.BdProductSpecs;
import com.hzs.sale.product.controller.manage.params.ProductParams;
import com.hzs.sale.product.param.SupplierProductCensusParam;
import com.hzs.sale.product.vo.ProductVo;
import com.hzs.sale.product.vo.SupplierProductCensusVo;
import com.hzs.system.sys.dto.LoginUser;

import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 产品相关服务
 */
public interface IBdProductService extends IService<BdProduct> {

    /**
     * 根据产品主键获得产品
     *
     * @param pkProduct 主键
     */
    BdProduct getProduct(Integer pkProduct);

    /*
     * @description: 根据产品id查询产品
     **/
    List<BdProductExt> queryProductById(Set<Integer> productIdSet, Integer pkCountry, Integer repurchaseType);

    /*
     * @description: 根据规格、主键查询产品
     **/
    List<BdProductExt> queryProductExtById(List<BdProductSpecs> productSpecsList, Integer pkCountry);

    /**
     * 新增商品信息
     *
     * @param productParams
     */
    String saveProduct(ProductParams productParams, LoginUser loginUser);

    /**
     * 修改商品信息
     *
     * @param productParams
     */
    void updateProduct(ProductParams productParams, LoginUser loginUser);

    /**
     * 删除商品
     *
     * @param pkId
     */
    void removeProduct(Integer pkId, LoginUser loginUser);

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

    /**
     * 查询产品列表
     *
     * @param productParams
     * @return
     */
    List<ProductVo> selectByQueryList(ProductParams productParams);

    /**
     * 产品移动（上移/下移）
     *
     * @return
     */
    void productMove(Integer productId, Integer productMoveType, LoginUser loginUser);

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

    /**
     * 查询产品map
     *
     * @param pkProductList 产品ID列表
     * @param pkCountry     所属国家
     * @return
     */
    Map<Integer, BdProduct> queryProductMap(Collection<Integer> pkProductList, Integer pkCountry);

    /**
     * 查询带有规格的产品列表
     *
     * @param pkCountry 所属国家
     * @return
     */
    List<BdProductExt> queryProductExistSpecs(Integer pkCountry);

    /**
     * 供应商产品统计
     *
     * @param supplierProductCensusParam
     * @return
     */
    List<SupplierProductCensusVo> getSupplierProductCensus(SupplierProductCensusParam supplierProductCensusParam);

    /**
     * 查询产品信息
     *
     * @param productId
     * @return
     */
    ProductVo getByProductId(Integer productId);

}
