package com.cpop.mall.business.service;

import com.cpop.mall.business.bo.ProductBo;
import com.cpop.mall.business.bo.ProductPageBo;
import com.cpop.mall.business.entity.Product;
import com.cpop.mall.business.vo.*;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;

import java.util.List;

/**
 * 商城-商品表 服务层。
 *
 * @author DB
 * @since 2023-10-23
 */
public interface ProductService extends IService<Product> {

    /**
     * @descriptions 分页查询商城-商品
     * @author DB
     * @date 2023/10/23 11:59
     * @param bo 请求参数
     * @return: com.mybatisflex.core.paginate.Page<com.cpop.mall.business.entity.Product>
     */
    Page<ProductPageVo> getProductPage(ProductPageBo bo);

    /**
     * @descriptions 分页查询商城-商品
     * @author DB
     * @date 2023/10/27 13:41
     * @param bo 请求参数
     * @return: com.mybatisflex.core.paginate.Page<com.cpop.mall.business.vo.MiniProductPageVo>
     */
    Page<MiniProductPageVo> getMiniProductPage(ProductPageBo bo);

    /**
     * @descriptions 创建规格
     * @author DB
     * @date 2023/10/23 12:43
     * @param specificationGroups 请求参数
     * @return: java.util.List<com.cpop.mall.business.vo.ProductSpecificationCreateVo>
     */
    List<String> createSpecification(List<List<String>> specificationGroups);

    /**
     * @descriptions 保存商城-商品
     * @author DB
     * @date 2023/10/23 12:15
     * @param bo 请求参数
     * @return: void
     */
    void insertProduct(ProductBo bo);

    /**
     * @descriptions 根据主键更新商城-商品
     * @author DB
     * @date 2023/10/23 16:51
     * @param bo 请求参数
     * @return: void
     */
    void updateProduct(ProductBo bo);

    /**
     * @descriptions 根据主键重置商城商品
     * @author DB
     * @date 2023/10/23 17:21
     * @param id
     * @return: void
     */
    void resetProduct(String id);

    /**
     * @descriptions 获取果酱课卡模板
     * @author DB
     * @date 2023/10/23 18:11
     * @param
     * @return: java.util.List<com.cpop.jambox.business.entity.CardTemplate>
     */
    List<JamboxCardTemplateListVo> getJamboxCardTemplate();

    /**
     * @descriptions 下单需要选择店铺/校区
     * @author DB
     * @date 2023/10/26 15:34
     * @return: java.util.List<com.cpop.mall.business.vo.StoreListVo>
     */
    List<StoreListVo> getStoreList();

    /**
     * @descriptions 查询商品评价分页列表
     * @author DB
     * @date 2023/10/26 17:02
     * @param productId 商品id
     * @return: com.mybatisflex.core.paginate.Page<com.cpop.mall.business.vo.ProductEvaluateVo>
     */
    Page<ProductEvaluateVo> getOrderEvaluatePage(String productId);

    /**
     * @descriptions 获取商品详情
     * @author DB
     * @date 2023/11/06 11:56
     * @param id 商品id
     * @return: com.cpop.mall.business.vo.ProductInfoVo
     */
    ProductInfoVo getProductInfo(String id);

    /**
     * @descriptions 查询商城同类型随机商品
     * @author DB
     * @date 2023/11/13 16:24
     * @param id 主键
     * @param productType 商品类型
     * @return: com.mybatisflex.core.paginate.Page<com.cpop.mall.business.vo.MiniProductPageVo>
     */
    Page<MiniProductPageVo> getSameTypeRandomProduct(String id, Integer productType);
}
