package com.ruoyi.ems.service;

import com.ruoyi.ems.domain.ElecMeterH;
import com.ruoyi.ems.domain.EnergyMeter;
import com.ruoyi.ems.model.ElecConsumptionExportVO;
import com.ruoyi.ems.model.ElecConsumptionVO;
import com.ruoyi.ems.model.QueryMeter;

import java.util.List;

/**
 * 用电统计服务接口
 *
 * 重构说明：
 * 1. 移除对 EnergyMeter 的依赖，统一使用 ElecConsumptionVO
 * 2. 支持 hour/day/month/year 四种时间粒度
 */
public interface IElecConsumptionService {

    /**
     * 查询用电小时计量类型列表
     */
    List<String> getElecHourTypes(QueryMeter queryMeter);

    /**
     * 查询电表原始计量数据
     */
    List<ElecMeterH> selectMDevElecConsumptionList(QueryMeter queryMeter);

    /**
     * 查询区域用电统计列表
     */
    List<ElecConsumptionVO> selectAreaElecConsumptionList(QueryMeter queryMeter);

    /**
     * 查询设施用电统计列表
     */
    List<ElecConsumptionVO> selectFacsElecConsumptionList(QueryMeter queryMeter);

    /**
     * 查询表计抄表数据汇总
     */
    ElecConsumptionVO selectMDevElecConsumptionSummary(QueryMeter queryMeter);

    /**
     * 查询区域用电统计汇总
     */
    ElecConsumptionVO selectAreaElecConsumptionSummary(QueryMeter queryMeter);

    /**
     * 查询设施用电统计汇总
     */
    ElecConsumptionVO selectFacsElecConsumptionSummary(QueryMeter queryMeter);

    /**
     * 导出区域用电统计列表
     */
    List<ElecConsumptionVO> exportAreaElecConsumptionList(QueryMeter queryMeter);

    /**
     * 导出设施用电统计列表
     */
    List<ElecConsumptionVO> exportFacsElecConsumptionList(QueryMeter queryMeter);

    /**
     * 转换为用电导出VO列表
     */
    List<ElecConsumptionExportVO> convertToElecExportVOList(List<ElecConsumptionVO> originalList, String timeDimension);

    // ==================== 小时粒度查询方法 ====================

    /**
     * 查询设施小时用电汇总统计
     *
     * 重构说明：返回类型从 EnergyMeter 改为 ElecConsumptionVO
     *
     * @param queryMeter 查询条件
     * @return 设施用电汇总列表
     */
    List<ElecConsumptionVO> getFacsMeterHourSta(QueryMeter queryMeter);

    /**
     * 查询设施小时用电明细
     *
     * @param queryMeter 查询条件
     * @return 小时用电明细列表
     */
    List<ElecMeterH> getFacsElecHourMeter(QueryMeter queryMeter);

    /**
     * 查询区域小时用电明细
     *
     * @param queryMeter 查询条件
     * @return 小时用电明细列表
     */
    List<ElecMeterH> getAreaElecHourMeter(QueryMeter queryMeter);

    /**
     * 计算时间范围内日平均用电
     * 兼容老接口: getElecDayAvg
     *
     * @param queryMeter 支持areaCode、deviceCode、date范围筛选
     * @return EnergyMeter
     */
    EnergyMeter selectElecDayAvg(QueryMeter queryMeter);

    /**
     * 按设备类型查询日用电
     * 兼容老接口: qryDeviceDay
     *
     * @param queryMeter 查询条件
     * @return 设备用电列表
     */
    List<EnergyMeter> qryDeviceElecByDay(QueryMeter queryMeter);
}