/*
* Copyright (c) 京北方信息技术股份有限公司 Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.executePlan.api.service;

import net.northking.cctp.common.db.Pagination;
import net.northking.cctp.common.db.excel.ExcelService;
import net.northking.cctp.common.dto.AdvancedQueryOptions;
import net.northking.cctp.common.http.QueryByPage;
import net.northking.cctp.executePlan.db.entity.AtuPlanInfo;
import net.northking.cctp.executePlan.dto.planBatch.BatchAppInfoDto;
import net.northking.cctp.executePlan.dto.planBatch.BatchScriptReportDto;
import net.northking.cctp.executePlan.dto.planInfo.*;
import net.northking.cctp.executePlan.dto.planScript.*;
import net.northking.cctp.executePlan.pub.dto.TestPlanScriptExecutionDetailDTO;

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

/**
 * 执行计划表Restful逻辑接口
 * @author maven-cctp-plugin
 * @since 1.0
 */
public interface AtuPlanInfoApiService extends ExcelService
{
  /**
   * 查询执行计划表列表
   *
   * @param queryByPage  查询条件
   * @return 查询结果列表
   */
  Pagination<AtuPlanInfoDetailDto> pagingQuery(QueryByPage<AtuPlanInfoQueryDto> queryByPage);



  /**
   * 获取执行计划表
   * @param uuid 主键
   * @return 接口数据传输对象
   */
  AtuPlanInfoDetailDto findByPK(String uuid);

  /**
   * 删除执行计划表
   * @param uuid  主键
   * @return 删除的记录数量
   */
  Integer deleteByPK(String uuid);

  /**
   * 计划执行
   * @param atuPlanRunDto  执行参数
   */
  void run(AtuPlanRunDto atuPlanRunDto);

  /**
   * 批量克隆
   *
   * @param batch 集合
   * @return 成功的数量
   */
  Integer clonePlan(List<String> batch);

  /**
   * 校验计划设备是否离线
   * @param planId 计划Id
   * @param batchId 批次ID
   */
  Map<String, Object> checkDeviceOffline(String planId, String batchId);

  /**
   * 更新计划下一次执行时间
   * @param planInfo 计划信息
   * @return 更新结果
   */
  Boolean updatePlanNextRunTime(AtuPlanInfo planInfo);

  String clonePlanInfo(String planId);

  AtuPlanInfoAppAndDeviceDto queryPlanAppAndDevice(String planId);


  Integer updatePlanEnable(AtuPlanInfo atuPlanInfo);

  List<Map<String,Object>> queryTaskLive(String taskId);

  Boolean isUse(List<String> params);


  /**
   * 创建委托信息
   * @param planId 计划ID
   * @param priority 优先级
   * @param batchId 批次ID
   * @param hasOfflineDevice 是否含有离线设备
   * @param caseMap 类型集合
   * @param isRetry 是否重试
   */
  void handlePlanDevice(String planId, String priority, String batchId,
                        boolean hasOfflineDevice, Map<String, Object> caseMap, boolean isRetry);

  /**
   * 根据批次id查询计划信息
   * @param batchId 批次id
   * @return 计划信息
   */
  AtuPlanInfo findByBatchId(String batchId);

  /**
   * 处理判断自动化类型
   * @param scriptType 脚本类型
   * @param caseMap 自动化类型
   */
  void handleAutoType(String scriptType, Map<String, Object> caseMap);

  String selectScriptByPlan(AtuPlanScriptDto dto);

  String savePlanScript(AtuPlanScriptSaveDto dto);

  String savePlanData(AtuPlanInfoAddDto dto);

  AtuPlanScriptResultDto queryLinkMdPage(String planId);

  Integer deletePlanScriptLinkMd(AtuPlanScriptDeleteDto dto);

  List<String> queryPlanScriptList(String planId);

  Integer updatePlanStatus(String planId);

  Boolean checkScript(List<String> ids);

  AtuPlanScriptPageDto queryScriptPage(QueryByPage<AtuPlanScriptQueryDto> queryByPage);

  /**
   * 计划批次报告查询
   * @param batchId 批次id
   * @return 结果
   */
    BatchScriptReportDto queryPlanBatchReport(String batchId);

  String updatePrincipal(AtuPlanPrincipalDto dto);

  /**
   * 导出执行结果
   * @param response 返回体
   * @param batchId 批次号
   */
    void exportBatchExecResult(HttpServletResponse response, String batchId);

  /**
   * 导出报告
   * @param response 返回体
   * @param exportDto 导出参数
   */
  void exportBatchReport(HttpServletResponse response, AtuPlanExportDto exportDto);

  /**
   * 根据最后批次id更新计划状态
   * @param lastBatchId  最后批次id
   * @param planStatus 计划状态
   * @return 结果
   */
    int updateStatusByLastBatchId(String lastBatchId, String planStatus);

  /**
   * 下载app性能文件数据
   * @param tenantId 租户id
   * @param filePath 文件地址
   * @return 结果集
   */
   List<BatchAppInfoDto> downloadAppProInfoList(String tenantId, String filePath);

  /**
   * 校验数据集是否被计划使用
   * @param scriptIdList
   * @return
   */
    Boolean checkDataSetUsedByScriptIdList(List<String> scriptIdList);

    Pagination<AtuPlanInfoDetailDto> pageUpFrontPlan(QueryByPage<AtuPlanInfoPageDto> queryByPage);

    /**
     * ATS获取执行计划中脚本执行情况
     * @return
     */
    List<TestPlanScriptExecutionDetailDTO> scriptExecutionDetail();

    AdvancedQueryOptions advancedQueryOptions(String projectId);
}
