package com.njcn.gather.storage.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.gather.storage.pojo.param.SingleNonHarmParam;
import com.njcn.gather.storage.pojo.param.StorageParam;
import com.njcn.gather.storage.pojo.po.SimAndDigBaseResult;
import com.njcn.gather.storage.pojo.po.SimAndDigNonHarmonicResult;
import com.njcn.gather.storage.pojo.vo.RawDataVO;
import com.njcn.gather.storage.pojo.vo.RawResultDataVO;

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

public interface SimAndDigNonHarmonicService extends IService<SimAndDigNonHarmonicResult> {


    /**
     * 根据设备ID和通道号获取非谐波结果
     *
     * @param scriptId 脚本ID
     * @param sort     总检测脚本中的测试项序号列表
     * @param deviceId 设备ID
     * @param chnNum   通道号，从1开始
     * @return 非谐波结果
     */
    List<SimAndDigBaseResult> listSimAndDigBaseResult(String scriptId, List<Integer> sort, String deviceId, String chnNum, String code);

    /**
     * 非谐波原始数据展示
     *
     * @param param
     * @return
     */
    Map<String, List<RawDataVO>> listNonHarmData(StorageParam param);

    /**
     * 非谐波原始数据展示
     *
     * @param param
     * @return
     */
    Map<String, List<RawResultDataVO>> listNonHarmResultData(StorageParam param);

    /**
     * 根据参数查询指定非谐波结果
     * @param singleNonHarmParam 查询参数
     */
    SimAndDigNonHarmonicResult getSingleSimAndDigBaseResult(SingleNonHarmParam singleNonHarmParam);

    /**
     * 获取所有结果数据
     * @param scriptId
     * @param code
     * @param devId
     * @return
     */
    List<SimAndDigNonHarmonicResult> listSimAndDigBaseResult(String scriptId,String code,String devId);

    /**
     * 根据查询条件查找结果
     * @param param 查询条件
     */
    List<SimAndDigNonHarmonicResult> queryByCondition(SingleNonHarmParam param);

    /**
     * 按设备回路和 sort 查询所有非谐波结果，并把 adType 映射为字典 CODE。
     * 用于功率 P：同一 sort 下可能同时存在 TotW/TotVAr/TotVA 等总量结果。
     */
    List<SimAndDigNonHarmonicResult> queryBySortListWithAdTypeCode(SingleNonHarmParam param);


    /**
     *
     * 获取所有原始数据
     *
     * @param scriptId
     * @param code
     * @param devId
     * @return
     */
    List<SimAndDigNonHarmonicResult> listAllSimAndDigRawData(String scriptId, String code, String devId);

    Map<String, Integer> maxSortByDevIds(String code, String scriptId, List<String> devIds);

    List<SimAndDigNonHarmonicResult> listByDevIdsAndSorts(String code, String scriptId, List<String> devIds, List<Integer> sorts);

    Map<String, List<Integer>> resultFlagsByDevIdsAndSorts(String code, String scriptId, List<String> devIds, List<Integer> sorts);
}
