package com.ruoyi.web.modules.screen.mapper;

import java.util.Date;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.ruoyi.web.modules.screen.domain.dto.LivestockResourceBandCountDto;
import com.ruoyi.web.modules.screen.domain.dto.LivestockResourceCategoryCountDto;
import com.ruoyi.web.modules.screen.domain.dto.LivestockResourceDateCountDto;
import com.ruoyi.web.modules.screen.domain.dto.LivestockResourceOverviewDto;
import com.ruoyi.web.modules.screen.domain.dto.LivestockResourceUserStructureDto;

/**
 * 大屏畜牧资源（AI 问诊）统计只读 Mapper。
 * <p>
 * 会话/消息过滤条件与 {@link com.ruoyi.web.modules.screen.support.LivestockResourceScreenRules} 一致。
 */
public interface LivestockResourceScreenMapper
{
    /** 年度累计：活跃用户、新用户、会话数、提问数等 */
    LivestockResourceOverviewDto selectYearOverviewMetrics(
            @Param("yearStart") Date yearStart, @Param("yearEnd") Date yearEnd);

    Long countTodayActiveUsers(@Param("dayStart") Date dayStart, @Param("dayEnd") Date dayEnd);

    Long countTodayNewUsers(@Param("dayStart") Date dayStart, @Param("dayEnd") Date dayEnd);

    Long countTodaySessions(@Param("dayStart") Date dayStart, @Param("dayEnd") Date dayEnd);

    Long countTodayQuestionCount(@Param("dayStart") Date dayStart, @Param("dayEnd") Date dayEnd);

    /** 近 N 日每日会话数 */
    List<LivestockResourceDateCountDto> selectDailySessionCounts(
            @Param("rangeStart") Date rangeStart, @Param("rangeEnd") Date rangeEnd);

    /** 近 N 日每日 AI 回复数 */
    List<LivestockResourceDateCountDto> selectDailyAiReplyCounts(
            @Param("rangeStart") Date rangeStart, @Param("rangeEnd") Date rangeEnd);

    LivestockResourceUserStructureDto selectUserStructure();

    Long countAskerMessagesInYear(@Param("yearStart") Date yearStart, @Param("yearEnd") Date yearEnd);

    /** 提问消息按问题分类计数 */
    List<LivestockResourceCategoryCountDto> selectAskerCategoryCounts(
            @Param("yearStart") Date yearStart, @Param("yearEnd") Date yearEnd);

    /** statDate 当天按小时会话数 */
    List<LivestockResourceDateCountDto> selectHourlySessionCounts(
            @Param("windowStart") Date windowStart, @Param("windowEnd") Date windowEnd);

    /** statDate 当天按小时 AI 回复数 */
    List<LivestockResourceDateCountDto> selectHourlyAiReplyCounts(
            @Param("windowStart") Date windowStart, @Param("windowEnd") Date windowEnd);

    Long countYearSessions(@Param("yearStart") Date yearStart, @Param("yearEnd") Date yearEnd);

    /** 会话深度（回复条数）分桶统计 */
    List<LivestockResourceBandCountDto> selectSessionReplyBuckets(
            @Param("yearStart") Date yearStart, @Param("yearEnd") Date yearEnd);

    Long countAiRepliesOk(@Param("yearStart") Date yearStart, @Param("yearEnd") Date yearEnd);

    Long countAiRepliesFail(@Param("yearStart") Date yearStart, @Param("yearEnd") Date yearEnd);

    /** 年度文本提问内容，供本地分词 */
    List<String> selectTextAskerContents(@Param("yearStart") Date yearStart, @Param("yearEnd") Date yearEnd);

    List<Integer> selectDistinctSessionYears();
}
