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.HomeScreenStatPeriodDto;
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.LivestockResourceProblemLevelCountDto;
import com.ruoyi.web.modules.screen.domain.dto.LivestockResourceProductOutputMonthDto;
import com.ruoyi.web.modules.screen.domain.dto.LivestockResourceProductOutputSumDto;
import com.ruoyi.web.modules.screen.domain.dto.LivestockResourceThreeAssetsSumDto;
import com.ruoyi.web.modules.screen.domain.dto.LivestockResourceTechPersonnelDto;
import com.ruoyi.web.modules.screen.domain.dto.LivestockResourceUserStructureDto;
import com.ruoyi.web.modules.screen.domain.dto.LivestockResourceVaccinationSumDto;
import com.ruoyi.web.modules.screen.domain.vo.LivestockResourceVetCountListItemVo;

/**
 * 大屏畜牧资源统计只读 Mapper。
 * <p>
 * 看板产业区块：农村三资、问题上报等级计数、产量/疫苗最大填报月与合计、兽医/机构/专家台账人数、
 * 科技服务人员单例等。<br>
 * 另保留部分 AI 问诊统计 SQL（历史实现 / 年份下拉等），看板主接口已不再组装 AI 九区块。
 * </p>
 */
public interface LivestockResourceScreenMapper
{
    /** 农村三资：全县各村经营性/非经营性/固定资产合计（万元） */
    LivestockResourceThreeAssetsSumDto sumRuralThreeAssetsFixed();

    /** 所选年上报时间区间内，按问题等级计数 */
    List<LivestockResourceProblemLevelCountDto> countThreeAssetsProblemByLevel(
            @Param("yearStart") Date yearStart, @Param("yearEnd") Date yearEnd);

    /** 所选年畜牧产品产量最大填报月 */
    HomeScreenStatPeriodDto selectLatestLivestockProductOutputStatPeriodByYear(@Param("statYear") int statYear);

    /** 指定年月全县肉/奶产量合计（万吨） */
    LivestockResourceProductOutputSumDto sumLivestockProductOutputByStatYearMonth(
            @Param("statYear") int statYear, @Param("statMonth") int statMonth);

    /** 所选年 1～maxMonth 各月全县肉/奶产量合计 */
    List<LivestockResourceProductOutputMonthDto> sumLivestockProductOutputMonthlyUpTo(
            @Param("statYear") int statYear, @Param("maxMonth") int maxMonth);

    /** 所选年疫苗接种最大填报月 */
    HomeScreenStatPeriodDto selectLatestVaccinationStatPeriodByYear(@Param("statYear") int statYear);

    /** 指定年月全县应免/实免合计 */
    LivestockResourceVaccinationSumDto sumVaccinationByStatYearMonth(
            @Param("statYear") int statYear, @Param("statMonth") int statMonth);

    /** 兽医人员数：resource_type=004001 且未删除 */
    Long countVetMedicalResource();

    /**
     * 兽医人数按乡镇汇总（resource_type=004001 且未删除）；可选按乡镇筛选。
     * <p>按部门 order_num、乡镇 ID 升序。</p>
     */
    List<LivestockResourceVetCountListItemVo> selectVetCountByTown(@Param("townDeptId") Long townDeptId);

    /** 诊疗机构数：resource_type=004003 且未删除 */
    Long countMedicalOrgResource();

    /** 专家人员数：biz_tech_resource resource_type=004005 且未删除 */
    Long countTechExpertResource();

    /** 科技服务人员单例：特派员 / 农业事业单位总人数 */
    LivestockResourceTechPersonnelDto selectTechServicePersonnelTotals();

    /** 年度累计：活跃用户、新用户、会话数、提问数等（AI 问诊，供其它区块） */
    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();
}
