package com.usky.ems.service;

import com.usky.ems.service.vo.EmsProjectResponse;
import com.usky.ems.service.vo.EmsSummaryResponse;
import com.usky.ems.service.vo.EmsOverviewEnergyItemVO;
import com.usky.ems.service.vo.EmsOverviewDeviceSystemStatVO;

import java.util.Map;

/**
 * 能源总览服务（overview）
 */
public interface EmsOverviewService {

    /**
     * 获取项目信息（当前租户下指定 projectId，或未传 projectId 时取该租户第一个项目）
     */
    EmsProjectResponse getProject(Integer projectId);

    /**
     * 获取项目数据概括（时间维度联动）
     */
    EmsSummaryResponse getSummary(Long projectId, String timeDimension, String timeValue);

    /**
     * 获取概览页能源类型条目（如电/水/气）
     */
    java.util.List<EmsOverviewEnergyItemVO> queryOverviewItem();

    /**
     * 获取概览页设备系统统计（每个系统下设备数量）
     */
    java.util.List<EmsOverviewDeviceSystemStatVO> queryOverviewDeviceInfo(Long projectId);

    /**
     * 分类能耗统计（按时间维度、能耗类型等）
     * 先按 Map 结构返回，后续可以再封装 VO。
     */
    Map<String, Object> queryClassificationEnergy(Integer dateType, Integer energyType, Long projectId);

    /**
     * 能耗用能趋势（按时间维度：日/月/年）
     * 按能源类型关联产品调用 TSDB 汇总，返回当前期与去年同期各时间粒度的用能数据。
     */
    java.util.List<java.util.Map<String, Object>> queryEnergyTrend(Integer dateType, Integer energyType);

    /**
     * 建筑能耗分析（建筑/楼层能耗排名）
     * 返回按能耗从高到低排序的建筑（或楼层）名称及其能耗值列表（当前为模拟数据实现）。
     */
    java.util.List<java.util.Map<String, Object>> queryBuildingRanking(Integer dateType, Integer energyType);

    /**
     * 单位综合能耗、综合累计能耗、分类能耗占比（总览页顶部）
     * 部分数据来自真实表（项目、折标系数），能耗数值按规则模拟。
     */
    Map<String, Object> queryOverviewTop(Integer dateType, Long projectId);

    /**
     * 分项能耗占比（按能源类型展开下级分项，设备范围来自 ems_device_item_code）
     */
    java.util.List<java.util.Map<String, Object>> queryItemRatio(Integer dateType, Integer energyType);
}
