package com.njcn.event.common.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.njcn.event.pojo.param.EventBaseParam;
import com.njcn.event.pojo.param.StatisticsParam;
import com.njcn.event.pojo.vo.*;

import java.util.List;

/**
 * pqs-event
 * 暂降 监测点
 * @author cdf
 * @date 2022/6/23
 */
public interface EventAnalysisService {

    /**
     * 获取暂降事件分析
     * @author cdf
     * @date 2022/6/23
     */
    //Page<EventDetail> getEventAnalyse(EventBaseParam eventBaseParam);

    /**
     * 获取坐标
     * @param statisticsParam
     * @return
     */
    List<CoordsVO> getCoords(StatisticsParam statisticsParam);

    /**
     *获取Disdip表格
     * @param statisticsParam
     * @return
     */
    List<DISDIPVO> eventDisdip(StatisticsParam statisticsParam);

    /**
     * 获取IEC411数据
     * @param statisticsParam
     * @return
     */
    List<IEC411VO> IEC411(StatisticsParam statisticsParam);

    /**
     * 获取IEC28数据
     * @param statisticsParam
     * @return
     */
    List<IEC28VO> IEC28(StatisticsParam statisticsParam);

    /**
     * 获取时间列表
     * @param statisticsParam
     * @return
     */
    List<TimeVO> getReasonTypeTime(StatisticsParam statisticsParam);

    /**
     * 获取详细数据对象
     * @param statisticsParam
     * @return
     */
    StatisticVO getStatistic(StatisticsParam statisticsParam);

    ProbabilityVO getProbabilityDistribution(StatisticsParam statisticsParam);
    /**
     * 获取点状表格数据
     * @param statisticsParam
     * @return
     */
    VoltageToleranceCurveVO getPlot(StatisticsParam statisticsParam);

    /**
     *监测点暂降事件分析查询
     * @author zbj
     * @date 2022/7/25
     */
    Page<WaveTypeVO> getMonitorEventAnalyseQuery(EventBaseParam eventBaseParam);

    /**
     *监测点事件波形下载
     * @author zbj
     * @date 2022/7/28
     */
    //HttpServletResponse downloadMonitorEventWaveFile(WaveFileParam waveFileParam, HttpServletResponse response) throws Exception;

    /**
     * 判定压降落点区域
     * <p>
     * 入参：
     *   eventValue  特征幅值（百分比形式，如 "80.5" 表示 80.5%），内部 /100 得到 VVm（0~1）
     *   persistTime 持续时间（秒）
     * <p>
     * 优先规则：
     *   1) 持续时间 < 0.001 秒 或 VVm = 0  →  A区
     *   2) 按区间表逐行匹配（左闭右开 [下限, 上限)）
     *   3) 都不匹配返回 null，由调用方走兜底
     *
     * @return 区域名（A区/B区/C区/D区）；解析失败或未匹配返回 null
     */
     String determineDropZone(String eventValue, String persistTime);

}
