package com.ycwl.basic.clickhouse.service;

import com.ycwl.basic.model.mobile.statistic.req.CommonQueryReq;

import java.util.Date;
import java.util.HashMap;
import java.util.List;

/**
 * 统计数据查询服务接口
 * 用于抽象 t_stats 和 t_stats_record 表的查询
 * 支持 MySQL 和 ClickHouse 两种实现
 */
public interface StatsQueryService {

    /**
     * 统计预览视频人数
     */
    Integer countPreviewVideoOfMember(CommonQueryReq query);

    /**
     * 统计扫码访问人数
     */
    Integer countScanCodeOfMember(CommonQueryReq query);

    /**
     * 统计推送订阅人数
     */
    Integer countPushOfMember(CommonQueryReq query);

    /**
     * 统计上传头像人数
     */
    Integer countUploadFaceOfMember(CommonQueryReq query);

    /**
     * 统计生成视频人数
     */
    Integer countCompleteVideoOfMember(CommonQueryReq query);

    /**
     * 统计生成视频条数
     */
    Integer countCompleteOfVideo(CommonQueryReq query);

    /**
     * 统计总访问人数
     */
    Integer countTotalVisitorOfMember(CommonQueryReq query);

    /**
     * 统计预览视频条数
     */
    Integer countPreviewOfVideo(CommonQueryReq query);

    /**
     * 获取用户分销员 ID 列表
     */
    List<Long> getBrokerIdListForUser(Long memberId, Date startTime, Date endTime);

    /**
     * 获取用户最近进入类型
     */
    Long getUserRecentEnterType(Long memberId, Date endTime);

    /**
     * 获取用户项目 ID 列表
     */
    List<Long> getProjectIdListForUser(Long memberId, Date startTime, Date endTime);

    /**
     * 统计分销员扫码次数
     */
    Integer countBrokerScanCount(Long brokerId);

    /**
     * 按日期统计分销员扫码数据
     */
    List<HashMap<String, Object>> getDailyScanStats(Long brokerId, Date startTime, Date endTime);

    /**
     * 按小时统计扫码人数（仅返回统计数据，不含订单）
     * 返回格式: [{t: "MM-dd HH", count: "xxx"}, ...]
     */
    List<HashMap<String, String>> scanCodeMemberChartByHour(CommonQueryReq query);

    /**
     * 按日期统计扫码人数（仅返回统计数据，不含订单）
     * 返回格式: [{t: "MM-dd", count: "xxx"}, ...]
     */
    List<HashMap<String, String>> scanCodeMemberChartByDate(CommonQueryReq query);

    /**
     * 按小时统计访问打印样片页面人数
     * 返回格式: [{t: "MM-dd HH", count: "xxx"}, ...]
     */
    List<HashMap<String, String>> printerFromSampleChartByHour(CommonQueryReq query);

    /**
     * 按日期统计访问打印样片页面人数
     * 返回格式: [{t: "MM-dd", count: "xxx"}, ...]
     */
    List<HashMap<String, String>> printerFromSampleChartByDate(CommonQueryReq query);
}
