package com.energy.manage.service.service.analysis;

import com.alibaba.fastjson.JSONArray;
import com.energy.manage.common.base.Page;
import com.energy.manage.common.po.analysis.AnalysisResultPo;
import com.energy.manage.common.po.windfield.WindFieldPO;
import com.energy.manage.common.reponse.ResultResp;
import com.energy.manage.service.domain.dto.analysis.AnalysisDto;
import com.energy.manage.service.domain.dto.analysis.AnalysisResultDto;
import com.energy.manage.service.domain.vo.analysis.*;
import com.energy.manage.service.domain.vo.windenginegroup.WindEngineGroupShortVo;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 分析服务
 * @author chy
 * @date 2024/5/23 12:59
 * @desc
 */
public interface AnalysisService {

    /**
     * 分析结果列表
     * @param analysisResultDto
     * @return
     */
    List<AnalysisResultVo> analysisResultList(AnalysisResultDto analysisResultDto,Boolean isIntranet);



    /**
     * 分析结果风场列表
     * @param analysisResultDto
     * @return
     */
    Page<WindFieldPO> analysisResulFieldList(AnalysisResultDto analysisResultDto);

    /**
     * 根据风场查询分析结果
     * @param fieldCode
     * @return
     */
    List<AnalysisResultVo> analysisResultListByAnalysisCode(String fieldCode);

    /**
     * 添加分析结果
     * @param analysisResultPo
     * @return
     */
    int addAnalysisResult(AnalysisResultPo analysisResultPo);


    /**
     * 分析
     * @param analysisDto
     * @return
     */
    ResultResp analysis(AnalysisDto analysisDto);


    /**
     * 调用分析并做调用算法参数处理
     * @param analysisDto
     * @throws Exception
     */
    void callAnalysis(AnalysisDto analysisDto) throws Exception;


    /**
     * 分析编辑查询
     * @param batchCode
     * @return
     */
    AnalysisResultShowVo analysisEditQuery(String batchCode);

    /**
     * 查询已经分析的分析类型
     * @param batchCode
     * @return
     */
    List<Map<String, Object>> queryAnalysisedType(String batchCode);

    /**
     * 查询所有的分析类型
     */
    List<Map<String, Object>> queryAllAnalysisType();

    /**
     * 查询已经分析的风机信息
     * @param batchCode
     * @param analysisTypeCode
     * @return
     */
    Set<WindEngineGroupShortVo> queryAnalysisedEngine(String batchCode, String analysisTypeCode);

    /**
     * 分析详情
     * @param batchCode
     * @param analysisTypeCode
     * @param fieldEngineCodes
     * @param isIntranet
     * @return
     */
    List<AnalysisDetailVo> analysisDetail(String batchCode, String analysisTypeCode, List<String> fieldEngineCodes, boolean isIntranet);


    /**
     * 分析中检查
     * @return
     */
    boolean checkAnalysising();

    /**
     * 开启/关闭自动分析
     * @param batchCode
     * @param onOffCall
     * @return
     */
    int onOffAutoAnalysis(String batchCode, Integer onOffCall);


    /**
     * 分析类型结果图配置接口
     * @return
     */
    JSONArray queryAnalysisTypeConfig();


    /**
     * 根据角色获取风场及分析编号信息
     * @return
     */
    List<Map<String,Object>>getAnalysisCodeInfo(Integer roleId);


    /**
     * 查询风场及分析信息
     * @param batchCode
     * @return
     */
    FieldAndAnalysisInfoVo getFieldInfo(String batchCode);


    /**
     * 全部文件下载查询接口
     * @param fieldCode
     * @param batchCode
     * @return
     */
    List<String> queryDownloadFile(String fieldCode, String batchCode);


    /**
     * 文件现在
     * @param batchCode
     * @param fieldCode
     * @param analysisTypeCode
     * @return
     */
    ResultResp downloadFile(String fieldCode, String batchCode, String analysisTypeCode, HttpServletResponse response);


    /**
     * 创建批次号
     * @param fieldCode
     * @return
     */
    String createWindFieldBatchCode(String fieldCode);

}
