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

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.web.modules.screen.domain.vo.LivestockResourceProductOutputListItemVo;
import com.ruoyi.web.modules.screen.domain.vo.LivestockResourceThreeAssetsProblemListItemVo;
import com.ruoyi.web.modules.screen.domain.vo.LivestockResourceVaccinationListItemVo;
import com.ruoyi.web.modules.screen.domain.vo.LivestockResourceVetCountListItemVo;
import com.ruoyi.web.modules.screen.service.ILivestockResourceScreenService;

/**
 * 大屏 — 畜牧资源统计（只读）。
 * <p>
 * 提供看板聚合接口，以及三资问题上报 / 产量 / 疫苗 / 兽医数量等下钻明细分页。
 * 看板含：核心总览、农村三资、问题上报占比、产量趋势、疫苗接种、线下预约、
 * 科技特派员、农业事业单位、农技课堂、实战培训。
 * 已屏蔽 AI 问诊九区块（活跃度、用户结构、分类、模型调用、分时、会话分布、状态、热门、关键词）。
 * </p>
 * <p>权限标识示例：{@code bigScreen:livestockResource:query}。</p>
 *
 * @see ILivestockResourceScreenService
 */
@RestController
@RequestMapping("/bigScreen/livestockResource")
public class LivestockResourceScreenController extends BaseController
{
    @Autowired
    private ILivestockResourceScreenService livestockResourceScreenService;

    /**
     * 畜牧资源看板一屏数据（已屏蔽 AI 问诊九区块）。
     *
     * @param statYear 统计年份，如 {@code 2026}；当年截止至服务器当天，历史年截止 12-31
     * @return {@code data} 为 {@link com.ruoyi.web.modules.screen.domain.vo.LivestockResourceDashboardVo}
     */
    @GetMapping("/dashboard")
    public AjaxResult dashboard(@RequestParam("statYear") String statYear)
    {
        return success(livestockResourceScreenService.loadDashboard(statYear));
    }

    /**
     * 三资具体问题上报情况明细（分页）；按 {@code report_time} 倒序。
     * <p>
     * 数据源 {@code biz_three_assets_problem_report}；大屏全县口径（清空 dataScope）。
     * 乡镇/村下拉可复用首页 {@code /bigScreen/home/townOptions}、{@code /villageTree}。
     * </p>
     *
     * @param statYear      所属年份；未传不过滤（不按上报时间窗限制）
     * @param townDeptId    所属乡镇部门 ID，可选
     * @param villageDeptId 所属村部门 ID，可选
     */
    @GetMapping("/threeAssetsProblemReports")
    public TableDataInfo threeAssetsProblemReports(
            @RequestParam(value = "statYear", required = false) Integer statYear,
            @RequestParam(value = "townDeptId", required = false) Long townDeptId,
            @RequestParam(value = "villageDeptId", required = false) Long villageDeptId)
    {
        startPage();
        List<LivestockResourceThreeAssetsProblemListItemVo> list =
                livestockResourceScreenService.listThreeAssetsProblemReports(statYear, townDeptId, villageDeptId);
        return getDataTable(list);
    }

    /**
     * 畜牧产品产量数据明细（分页）；按 {@code stat_year}、{@code stat_month} 倒序。
     * <p>数据源 {@code biz_livestock_product_output}；大屏全县口径。</p>
     *
     * @param statYear      所属年份；未传不过滤
     * @param statMonth     所属月份；未传不过滤
     * @param townDeptId    所属乡镇，可选
     * @param villageDeptId 所属村，可选
     */
    @GetMapping("/productOutputs")
    public TableDataInfo productOutputs(
            @RequestParam(value = "statYear", required = false) Integer statYear,
            @RequestParam(value = "statMonth", required = false) Integer statMonth,
            @RequestParam(value = "townDeptId", required = false) Long townDeptId,
            @RequestParam(value = "villageDeptId", required = false) Long villageDeptId)
    {
        startPage();
        List<LivestockResourceProductOutputListItemVo> list =
                livestockResourceScreenService.listProductOutputs(statYear, statMonth, townDeptId, villageDeptId);
        return getDataTable(list);
    }

    /**
     * 疫苗接种情况明细（分页）；按 {@code stat_year}、{@code stat_month} 倒序。
     * <p>数据源 {@code biz_vaccination_data}；大屏全县口径；免疫率优先用落库值。</p>
     *
     * @param statYear      所属年份；未传不过滤
     * @param statMonth     所属月份；未传不过滤
     * @param townDeptId    所属乡镇，可选
     * @param villageDeptId 所属村，可选
     */
    @GetMapping("/vaccinationData")
    public TableDataInfo vaccinationData(
            @RequestParam(value = "statYear", required = false) Integer statYear,
            @RequestParam(value = "statMonth", required = false) Integer statMonth,
            @RequestParam(value = "townDeptId", required = false) Long townDeptId,
            @RequestParam(value = "villageDeptId", required = false) Long villageDeptId)
    {
        startPage();
        List<LivestockResourceVaccinationListItemVo> list =
                livestockResourceScreenService.listVaccinationData(statYear, statMonth, townDeptId, villageDeptId);
        return getDataTable(list);
    }

    /**
     * 兽医数量明细（分页）；按乡镇汇总人数（非人员明细行）。
     * <p>
     * 数据源 {@code biz_medical_resource}；口径与总览一致：
     * {@code resource_type=004001} 且 {@code del_flag=0}；不随统计年变化。
     * </p>
     *
     * @param townDeptId 所属乡镇，可选；不传则返回全县各乡镇汇总
     */
    @GetMapping("/vetCounts")
    public TableDataInfo vetCounts(
            @RequestParam(value = "townDeptId", required = false) Long townDeptId)
    {
        startPage();
        List<LivestockResourceVetCountListItemVo> list = livestockResourceScreenService.listVetCounts(townDeptId);
        return getDataTable(list);
    }
}
