package com.czg.order.service;

import com.czg.order.vo.CostLineChartVO;
import com.czg.order.vo.CountPayTypeVo;
import com.czg.order.vo.ProfitRateVO;
import com.czg.order.vo.TotalVo;
import com.mybatisflex.core.service.IService;
import com.czg.order.entity.ShopOrderStatistic;

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

/**
 * 店铺订单统计报表 服务层。
 *
 * @author ww
 * @since 2025-11-20
 */
public interface ShopOrderStatisticService extends IService<ShopOrderStatistic> {

    /**
     * 数据统计 营业板块上半部分
     * @param shopId   店铺id
     * @param rangeType 时间范围类型
     *     TODAY,       // 今天
     *     YESTERDAY,   // 昨天
     *     LAST_7_DAYS, // 最近7天
     *     LAST_30_DAYS,// 最近30天
     *     THIS_WEEK,   // 本周
     *     THIS_MONTH   // 本月
     *     CUSTOM       // 自定义时间范围
     * @param start    开始时间 格式yyyy-MM-dd 今天/昨天不用传
     * @param end      结束时间 格式yyyy-MM-dd 今天/昨天不用传
     */
    ShopOrderStatistic getArchiveTradeData(Long shopId, String rangeType, LocalDate start, LocalDate end);

     /**
      * 获取多少天的数据  30/90天
      */
     List<TotalVo> getDateAmount(Long shopId, Integer day);
    /**
     * 获取支付方式数据
     */
    List<CountPayTypeVo> getSummaryPayTypeData(Long shopId, Integer day);
    /**
     * 利润率折线图
     */
    List<ProfitRateVO> profitRateBarChart(Long shopId, Integer day);

     /**
      * 成本折线图
      */
     List<CostLineChartVO> costLineChart(Long shopId, Integer day);




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

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

    /**
     * 实时统计某天数据
     */
    ShopOrderStatistic getRealTimeDataByDay(Long shopId, LocalDate day);

    /**
     * 获取某一天的数据 历史数据
     * 从ShopOrderStatistic 表中查询
     */
    ShopOrderStatistic getStatSingleDate(Long shopId, LocalDate day);

    /**
     * 统计  某时间段数据 总和 不包括当日实时数据
     *
     * @param start 开始时间
     * @param end   结束时间
     */
    ShopOrderStatistic getStatDateRange(Long shopId, LocalDate start, LocalDate end);
}
