package com.lesingle.modules.biz.review.mapper;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 数据统计分析聚合查询（复杂 SQL）
 */
@Mapper
public interface AnalyticsMapper {

    /** 作品从提交到首次评分的平均天数 */
    BigDecimal selectAvgReviewCycleDays(@Param("contestIds") List<Long> contestIds,
                                        @Param("tenantId") Long tenantId,
                                        @Param("isSuperTenant") boolean isSuperTenant);

    /** 最近 30 天内评分记录条数（用于日均评审量） */
    long selectScoreCountLast30Days(@Param("contestIds") List<Long> contestIds,
                                    @Param("tenantId") Long tenantId,
                                    @Param("isSuperTenant") boolean isSuperTenant);

    /** 待评审积压：分配状态为 assigned */
    long selectPendingAssignments(@Param("contestIds") List<Long> contestIds);

    /** 每件作品多评委分数标准差，再取平均 */
    BigDecimal selectAvgStddevAcrossWorks(@Param("contestIds") List<Long> contestIds,
                                          @Param("tenantId") Long tenantId,
                                          @Param("isSuperTenant") boolean isSuperTenant);

    /** 按月份统计报名量（最近约 6 个月窗口由 SQL 限定） */
    List<Map<String, Object>> selectMonthlyRegistrationCounts(@Param("contestIds") List<Long> contestIds,
                                                              @Param("tenantId") Long tenantId,
                                                              @Param("isSuperTenant") boolean isSuperTenant);

    /** 按月份统计作品提交量 */
    List<Map<String, Object>> selectMonthlyWorkCounts(@Param("contestIds") List<Long> contestIds,
                                                       @Param("tenantId") Long tenantId,
                                                       @Param("isSuperTenant") boolean isSuperTenant);

    /** 奖项分布：按奖项聚合 */
    List<Map<String, Object>> selectAwardDistribution(@Param("contestIds") List<Long> contestIds,
                                                       @Param("tenantId") Long tenantId,
                                                       @Param("isSuperTenant") boolean isSuperTenant);

    /** 评委工作量聚合 */
    List<Map<String, Object>> selectJudgeWorkload(@Param("contestIds") List<Long> contestIds,
                                                  @Param("tenantId") Long tenantId,
                                                  @Param("isSuperTenant") boolean isSuperTenant);

    /** 活动对比：单行指标（单活动） */
    Map<String, Object> selectContestComparisonRow(@Param("contestId") Long contestId,
                                                   @Param("tenantId") Long tenantId,
                                                   @Param("isSuperTenant") boolean isSuperTenant,
                                                   @Param("rangeStart") LocalDateTime rangeStart,
                                                   @Param("rangeEnd") LocalDateTime rangeEnd);
}
