package com.czg.order.service;

import com.czg.order.entity.ShopProdStatistic;
import com.czg.order.param.SaleSummaryCountParam;
import com.czg.order.vo.SaleSummaryCountVo;
import com.mybatisflex.core.service.IService;

import java.time.LocalDate;
import java.util.List;

/**
 * 服务层。
 *
 * @author zs
 * @since 2025-03-07
 */
public interface ShopProdStatisticService extends IService<ShopProdStatistic> {

    /**
     * 统计一段时间内的商品交易数据
     *
     * @return 商品数据
     */
    SaleSummaryCountVo summaryCount(SaleSummaryCountParam param);

    /**
     * 打印 商品交易数据
     */
    void summaryPrint(SaleSummaryCountParam param);


    /**
     * 获取某一段时间的商品交易数据
     * shopId    店铺id
     * rangeType 时间范围类型
     * TODAY,       // 今天
     * YESTERDAY,   // 昨天
     * LAST_7_DAYS, // 最近7天
     * LAST_30_DAYS,// 最近30天
     * THIS_WEEK,   // 本周
     * THIS_MONTH   // 本月
     * CUSTOM       // 自定义时间范围
     * start     开始时间 格式yyyy-MM-dd 今天/昨天不用传
     * end       结束时间 格式yyyy-MM-dd 今天/昨天不用传
     *
     * @return 商品数据
     */
    List<ShopProdStatistic> getArchiveTradeData(SaleSummaryCountParam param);

    List<ShopProdStatistic> getArchiveTradeDataBy10(Long shopId, Integer day);

    //------------------------------------------------------------下列为 后台使用------------------------------------------------------------

    /**
     * 统计某天数据并插入数据库
     */
    void statisticAndInsert(Long shopId, LocalDate day, Long categoryId);

    /**
     * 实时统计某天数据
     */
    List<ShopProdStatistic> getRealTimeDataByDay(Long shopId, LocalDate day, String productName, Long categoryId);

    /**
     * 获取某一天的数据 历史数据
     * 从ShopOrderStatistic 表中查询
     */
    List<ShopProdStatistic> getProdStatSingleDate(Long shopId, LocalDate day, String productName, Long categoryId);

    /**
     * 统计  某时间段数据 总和 不包括当日实时数据
     *
     * @param start 开始时间
     * @param end   结束时间
     */
    List<ShopProdStatistic> getProdStatDateRange(Long shopId, LocalDate start, LocalDate end, String productName, Long categoryId);
}
