package com.usky.ems.controller.web;

import com.usky.common.core.bean.ApiResult;
import com.usky.common.security.utils.SecurityUtils;
import com.usky.ems.service.EmsOverviewService;
import com.usky.ems.service.vo.EmsProjectResponse;
import com.usky.ems.service.vo.EmsSummaryRequest;
import com.usky.ems.service.vo.EmsSummaryResponse;
import com.usky.ems.service.vo.EmsOverviewDeviceSystemStatVO;
import com.usky.ems.service.vo.EmsOverviewEnergyItemVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * 能源能耗 - 概览模块 API
 * 建筑排名等涉及空间树的数据来自 base_space（见 {@link com.usky.ems.service.impl.EmsOverviewServiceImpl}）。
 * 基础路径前缀：/overview（网关再加 /prod-api/service-ems）
 */
@RestController
@RequestMapping("/overview")
public class EmsOverviewController {

    @Autowired
    private EmsOverviewService emsOverviewService;

    /**
     * 获取项目信息
     */
    @GetMapping("/project")
    public ApiResult<EmsProjectResponse> getProject(
            @RequestParam(required = false) Integer projectId) {
        return ApiResult.success(emsOverviewService.getProject(projectId));
    }

    /**
     * 获取项目数据概括（时间维度联动）
     */
    @GetMapping("/summary")
    public ApiResult<EmsSummaryResponse> getSummary(EmsSummaryRequest request) {
        return ApiResult.success(emsOverviewService.getSummary(
                request.getProjectId(), request.getTimeDimension(), request.getTimeValue()));
    }

    /**
     * 获取概览页能源类型条目（如电/水/气）
     */
    @GetMapping("/item")
    public ApiResult<List<EmsOverviewEnergyItemVO>> queryOverviewItem() {
        return ApiResult.success(emsOverviewService.queryOverviewItem());
    }

    /**
     * 获取概览页设备系统统计（每个系统下设备数量）
     */
    @GetMapping("/device-info")
    public ApiResult<List<EmsOverviewDeviceSystemStatVO>> queryOverviewDeviceInfo(
            @RequestParam(required = false) Long projectId) {
        return ApiResult.success(emsOverviewService.queryOverviewDeviceInfo(projectId));
    }

    /**
     * 分类能耗统计（按能源类型关联产品，调用 TSDB 分项汇总）
     * 参数说明：
     * - dateType：时间类型（1-日，2-月，3-年）
     * - energyType：能源类型（1电 2水 3冷 4热；分项 identifier 从 ems_energy_item_code 根节点解析）
     * - projectId：项目 ID（可选，不传则取当前租户第一个项目；用于查询折算系数）
     */
    @GetMapping("/classification-energy")
    public ApiResult<Map<String, Object>> queryClassificationEnergy(
            @RequestParam Integer dateType,
            @RequestParam Integer energyType,
            @RequestParam(required = false) Long projectId) {
        return ApiResult.success(emsOverviewService.queryClassificationEnergy(dateType, energyType, projectId));
    }

    /**
     * 能耗用能趋势（按能源类型关联产品，调用 TSDB 分项按时间粒度汇总，并与去年同期对比）
     * 参数说明：
     * - dateType：时间类型（1-日/小时，2-月/天，3-年/月）
     * - identifier：分项字段编码
     * - energyType：能源类型（1电 2水 3冷 4热）
     */
    @GetMapping("/energy-trend")
    public ApiResult<List<Map<String, Object>>> queryEnergyTrend(
            @RequestParam Integer dateType,
            @RequestParam Integer energyType) {
        return ApiResult.success(emsOverviewService.queryEnergyTrend(dateType, energyType));
    }

    /**
     * 建筑能耗分析（按建筑排名）
     * 参数说明：
     * - dateType：时间类型（1-日，2-月，3-年）
     * - itemCode：能耗分项字段编码
     * - energyType：能源类型（1电 2水 3冷 4热）
     */
    @GetMapping("/building-ranking")
    public ApiResult<List<Map<String, Object>>> queryBuildingRanking(
            @RequestParam Integer dateType,
            @RequestParam Integer energyType) {
        return ApiResult.success(emsOverviewService.queryBuildingRanking(dateType, energyType));
    }

    /**
     * 单位综合能耗、综合累计能耗、分类能耗占比（总览顶部）
     * 参数说明：
     * - dateType：时间类型（1-日，2-月，3-年）
     * - projectId：项目ID（可选，不传则取第一个项目）
     */
    @GetMapping("/top")
    public ApiResult<Map<String, Object>> queryOverviewTop(
            @RequestParam Integer dateType,
            @RequestParam(required = false) Long projectId) {
        return ApiResult.success(emsOverviewService.queryOverviewTop(dateType, projectId));
    }

    /**
     * 分项能耗占比
     * 参数说明：
     * - dateType：时间类型（1-日，2-月，3-年）
     * - energyType：能源类型（1电 2水 3冷 4热；根分项从 ems_energy_item_code 解析）
     */
    @GetMapping("/item-ratio")
    public ApiResult<List<Map<String, Object>>> queryItemRatio(
            @RequestParam Integer dateType,
            @RequestParam Integer energyType) {
        return ApiResult.success(emsOverviewService.queryItemRatio(dateType, energyType));
    }
}
