package com.usky.vpp.service;

import com.usky.common.core.bean.CommonPage;
import com.usky.vpp.service.vo.DrMonitorCurveVO;
import com.usky.vpp.service.vo.DrMonitorRecordVO;
import com.usky.vpp.service.vo.DrMonitorSiteResourceVO;
import com.usky.vpp.service.vo.DrMonitorSummaryVO;

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

/**
 * 需求响应监测（响应记录）
 */
public interface VppDrMonitorService {

    /**
     * 顶部 KPI：按时间区间内执行中/已结束事件关联邀约统计
     *
     * @param startDate 开始日期 yyyy-MM-dd
     * @param endDate   结束日期 yyyy-MM-dd
     * @param siteIds   站点 ID（必填，可多个）
     */
    DrMonitorSummaryVO getSummary(String startDate, String endDate, List<Long> siteIds);

    /**
     * 响应记录分页（查询口径与 summary 一致，按邀约展开）
     */
    CommonPage<DrMonitorRecordVO> pageRecords(String startDate, String endDate,
                                              List<Long> siteIds, Map<String, Object> params);

    /**
     * 折线图：按邀约主键取站点与响应时段，查询范围为开始前 2 小时至结束后 1 小时零 1 分钟，
     * 返回基线负荷、实际负荷与实际响应容量。
     *
     * @param invitationId 邀约表主键 id
     */
    DrMonitorCurveVO getCurve(Long invitationId);

    /**
     * 按响应事件查询邀约站点及其可调峰资源点，以站点分组返回。
     *
     * @param eventId 响应事件主键 id（vpp_dr_event.id）
     */
    List<DrMonitorSiteResourceVO> listEventSitePeakResources(Long eventId);
}
