package com.hotwj.platform.workbench.service;

import com.hotwj.platform.workbench.domain.vo.*;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;

import java.util.List;

/**
 * 政府端工作台Service接口
 *
 * @author shihongwei
 */
public interface IGovWorkbenchService {

    /**
     * 获取政府端首页统计
     *
     * @return 统计信息
     */
    GovHomeStatisticsVo getHomeStatistics();

    /**
     * 获取隐患统计总览
     *
     * @param regionCode 区域代码 (可选)
     * @return 总览信息
     */
    GovHiddenDangerSummaryVo getHiddenDangerSummary(String regionCode);

    /**
     * 获取隐患明细列表
     *
     * @param type 隐患类型Key
     * @param companyId 企业ID (可选)
     * @param pageQuery 分页参数
     * @return 分页列表
     */
    TableDataInfo<GovHiddenDangerDetailVo> getHiddenDangerList(String type, Long companyId, PageQuery pageQuery);

    /**
     * 获取隐患按月统计数据
     *
     * @param companyId 公司ID (可选)
     * @param startDate 开始日期 (格式: yyyy-MM)
     * @param endDate   结束日期 (格式: yyyy-MM)
     * @return 统计列表
     */
    List<HiddenDangerCountVo> getHiddenDangerCountByMonth(Long companyId, String startDate, String endDate);

    /**
     * 获取隐患排名前N的企业 (实时计算)
     *
     * @param limit 数量
     * @return 企业列表
     */
    List<GovCompanyRiskStatsVo> getTopRiskCompanies(int limit);

    /**
     * 分页获取企业隐患统计列表 (实时计算)
     *
     * @param companyName 企业名称搜索
     * @param pageQuery   分页参数
     * @return 分页列表 (包含辖区总隐患数)
     */
    GovCompanyRiskTableDataInfo getCompanyRiskList(String companyName, PageQuery pageQuery);

    /**
     * 获取指定企业的隐患统计总览
     *
     * @param companyId 企业ID
     * @return 总览信息
     */
    GovHiddenDangerSummaryVo getCompanyHiddenDangerSummary(Long companyId);

    /**
     * 获取学习折线图数据
     *
     * @param type 时间周期：week, month
     * @param beginTime 开始时间
     * @param endTime 结束时间
     * @return 学习统计数据列表
     */
    List<GovTrainingStatsVo> getTrainingStats(String type, String beginTime, String endTime);

    /**
     * 获取事故等级统计数据
     *
     * @return 事故等级统计列表
     */
    List<GovAccidentStatsVo> getAccidentLevelStats();
}
