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

import net.northking.cctp.common.db.OrderBy;
import net.northking.cctp.common.db.Pagination;
import net.northking.cctp.common.db.excel.ExcelService;
import net.northking.cctp.common.http.QueryByPage;
import net.northking.cctp.executePlan.db.entity.AtuPlanInfo;
import net.northking.cctp.executePlan.db.entity.AtuPlanTask;
import net.northking.cctp.executePlan.dto.planBatch.AtuBatchCaseInfoDto;
import net.northking.cctp.executePlan.dto.planBatch.BatchRetryDto;
import net.northking.cctp.executePlan.dto.planTask.*;
import net.northking.cctp.executePlan.pub.dto.ScriptFirstExecutionDTO;

import java.time.LocalDate;
import java.util.List;
import java.util.Map;

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

  /**
   * 查询任务列表
   * @param atuPlanTask 参数
   * @return 结果集
   */
  List<AtuPlanTask> query(AtuPlanTask atuPlanTask);

  /**
   * 查询任务列表
   * @param atuPlanTask 参数
   * @param orderBy 排序
   * @return 结果集
   */
  List<AtuPlanTask> query(AtuPlanTask atuPlanTask, OrderBy orderBy);

  /**
   * 新增计划执行任务表
   *
   * @param task         接口数据传输对象
   * @return 主键
   */
  String insert(AtuPlanTask task);

  /**
   * 根据id更新任务信息
   * @param task 任务信息
   * @return 结果
   */
  int updateByPrimaryKey(AtuPlanTask task);

  /**
   * 计划批次停止
   * @param batchId  批次ID
   * @return 结果
   */
  Boolean stop(String batchId);

  /**
   * 创建任务执行信息
   * @param planTask 任务信息
   * @param batchCaseInfo 用例信息
   * @return 执行信息
   */
  void createTaskExecuteInfo(AtuPlanTask planTask, AtuBatchCaseInfoDto batchCaseInfo);

  /**
   * 查询任务详情
   * @param taskId 任务ID
   * @return 任务详情
   */
    AtuPlanTaskDetailDto findTaskDetailById(String taskId);

  /**
   * 任务取消更新任务执行文件
   * @param params {“taskId”:"", "filePath":""}
   * @return 更新结果
   */
    Boolean updateTaskExecFile(Map<String, String> params);

  /**
   * 发送任务执行信息至消息队列
   *
   * @param batchId        批次ID
   * @param atuTaskExecDto 任务执行信息
   */
    void sendToQueue(String batchId, AtuTaskExecDto atuTaskExecDto, String type);

  /**
   * 查询应用ID
   * @param planId 计划ID
   * @param platformType 平台类型
   * @param appPackage app包名
   * @param caseType 用例类型
   * @return 结果
   */
  String queryAppId(String planId, String platformType, String appPackage, String caseType);

  /**
   * 创建脚本任务信息
   * @param planInfo 计划信息
   * @param batchId 批次号
   * @param envIdList 排序好的环境ID集合
   * @param inputDataList 输入项数据集合
   */
  void createdScriptTaskInfo(AtuPlanInfo planInfo, String batchId, List<String> envIdList,
                             List<AtuPlanInputDto> inputDataList);

  /**
   * 根据id查询任务信息
   * @param id id
   * @return 任务信息
   */
  AtuPlanTask findByPrimaryKey(String id);

  /**
   * 任务重试
   * @param retryDto 任务id
   * @return 结果
   */
    Boolean taskRetry(BatchRetryDto retryDto);

  /**
   * 根据批次id查询该批次的环境
   * @param batchId 批次id
   * @return 环境id
   */
    String queryEnvIdByBatchId(String batchId);

  /**
   * 根据批次id查询任务中的appId
   * @param batchId 批次Id
   * @return 结果集
   */
    List<String> queryAppIdListByBatchId(String batchId);

  /**
   * 根据计划id删除任务
   * @param planId 计划id
   * @param num 删除数量
   * @return 结果
   */
    int deleteByPlanIdLimit(String planId, int num);

  /**
   * 根据计划id统计任务数量
   * @param planId 计划id
   * @return 任务数量
   */
  int countByPlanId(String planId);


    AtuTaskSendBugDto querySendBugTaskInfo(String taskId);

  /**
   * 任务执行失败状态更新
   * @param planTask 任务信息
   * @param status 失败状态
   * @param errorMsg 错误信息
   */
  void taskExecFailUpdate(AtuPlanTask planTask, String status, String errorMsg);

  /**
   * 处理引用数据
   * @param caseParamMap 需要处理的参数集合
   * @param envId 环境id
   * @param projectId 系统id
   * @return 处理结果
   */
  Map<String, Object> handleQuoteData(Map<String, Object> caseParamMap, String envId, String projectId);

    ScriptFirstExecutionDTO getFirstExecuteInfo(String scriptId);

  Integer getScriptExecuteSuccessNum(String scriptId, LocalDate now);

    List<AtuPlanTask> getTasksByPlanId(String uuid);

  List<String> getTaskIdsByScriptIdsAndPlanId(List<String> oldScriptIds, String planId);

  void getActualImagePath(List<String> deletedFilePath, String execResultFile);
  /**
   * 查询执行超时N秒任务
   * @param timeout  超时时间
   * @return 任务集合
   */
    List<AtuPlanTask> queryExecTimeoutTask(int timeout);

  /**
   * 根据id查询任务扩展信息
   * @param taskId 任务id
   * @return 任务扩展信息
   */
  AtuPlanTaskExtendDto queryTaskExtendById(String taskId);
}
