package com.czg.product.service;

import com.czg.product.entity.Product;
import com.czg.product.param.ShopProductSkuParam;
import com.czg.product.vo.ShopGroupProductVo;
import com.czg.product.vo.ShopProductInfoVo;
import com.czg.product.vo.ShopProductSkuInfoVo;
import com.czg.product.vo.ShopProductVo;
import com.mybatisflex.core.service.IService;

import java.time.LocalTime;
import java.util.List;

/**
 * 用户端商品Service
 *
 * @author tankaikai
 * @since 2025-02-17 14:57
 */
public interface UProductService extends IService<Product> {

    /**
     * 用户端获取热门商品
     *
     * @param shopId 店铺ID
     * @return 热门商品
     */
    List<ShopProductVo> queryHotsProductList(Long shopId);

    /**
     * 用户端获取分组商品
     *
     * @param shopId 店铺ID
     * @return 分组商品
     */
    List<ShopGroupProductVo> queryGroupProductList(Long shopId);

    /**
     * 用户端获取商品详情
     *
     * @param id 商品ID
     * @return 商品详情
     */
    ShopProductInfoVo getProductInfo(Long id);

    /**
     * 用户端获取商品SKU详情
     *
     * @param param 商品SKU查询参数
     * @return 商品详情
     */
    ShopProductSkuInfoVo getProductSkuInfo(ShopProductSkuParam param);


    /**
     * 分组计算是否在可售时间内
     *
     * @param prodIsSaleTime   商品是否可售
     * @param useTime   开启时间管控 0:否；1:是
     * @param startTime 起售时间
     * @param endTime   停售时间
     * @return 是否可售时间 1-是，0-否
     */
    Integer calcIsSaleTime(int prodIsSaleTime, Integer useTime, LocalTime startTime, LocalTime endTime);

    /**
     * 商品计算是否在可售时间内
     *
     * @param days      星期几，例如 "Monday,Tuesday"
     * @param startTime 起售时间
     * @param endTime   停售时间
     * @return 是否可售时间 1-是，0-否
     */
    Integer calcIsSaleTime(String days, LocalTime startTime, LocalTime endTime);
}
