package com.tuoheng.admin.service.inspection;

import com.tuoheng.admin.entity.dto.InspectionDto;
import com.tuoheng.admin.entity.domain.FlightData;
import com.tuoheng.admin.entity.request.inspection.*;
import com.tuoheng.common.core.utils.JsonResult;

/**
 * 巡检任务Service接口
 *
 * @author wanjing
 * @team tuoheng
 * @date 2022-11-16
 */
public interface IInspectionService {

    /**
     * 查询巡检任务
     * @return
     */
    JsonResult inspectionCardList();

    /**
     * 查询巡检任务列表(分页)
     *
     * @param queryInspectionRequest 巡检任务查询实体
     * @return 巡检任务集合
     */
    JsonResult selectPageList(QueryInspectionPageListRequest queryInspectionRequest);

    /**
     * 查询巡检任务信息
     *
     * @param id 巡检任务Id
     * @return 巡检任务
     */
    JsonResult getInspectionInfo(String id);

    /**
     * 查询巡检任务详情
     *
     * @param id 巡检任务Id
     * @return 巡检任务详情
     */
    JsonResult getInspectionDetails(String id);

    /**
     * 查询巡检任务列表
     *
     * @param queryInspectionRequest 巡检任务查询实体
     * @return 巡检任务集合
     */
    JsonResult selectList(QueryInspectionPageListRequest queryInspectionRequest);

    /**
     * 新增巡检任务
     *
     * @param addInspectionRequest 新增任务请求参数
     * @return 结果
     */
    JsonResult insert(AddInspectionRequest addInspectionRequest);

    /**
     * 修改巡检任务
     *
     * @param editInspectionRequest 修改任务请求参数
     * @return 结果
     */
    JsonResult update(EditInspectionRequest editInspectionRequest);

    JsonResult getListByAirportId(InspectionDto dto);

    JsonResult getVideoById(String id);

    /**
     * 获取飞行轨迹
     * @param id
     * @return
     */
    JsonResult findFlightData(String id);

    /**
     * 根据巡检ID查询最新一条遥测数据
     * @param inspectionId
     * @return
     */
    FlightData getFlightDataByInspectionId(String inspectionId);

     /**
      * 立即执行
     * @param id 任务id
     * @return 结果
     */
    JsonResult execute(String id);

    /**
     * 被硬件调用，执行任务后，回调执行状态
     */
    JsonResult updateExecuteTaskStatus(ExecuteTaskStatusRequest executeTaskStatusRequest);

    /**
     * 被硬件调用，存任务飞行开始/结束状态
     */
    JsonResult updateStatus(MissionStatusRequest missionStatusRequest);

    /**
     * 被硬件调用，存飞行轨迹
     * @param inspectionRequest
     * @return
     */
    JsonResult track(InspectionRequest inspectionRequest);

    /**
     * 上传离线视频
     *
     * @param request
     * @return
     */
    JsonResult uploadFlightUrl(UploadFlightUrlRequest request);

    /**
     * 修改巡检任务
     *
     * @param request
     * @return
     */
    JsonResult updateTaskByCode(UpdateTaskByCodeRequest request);

    /**
     * 根据任务id获取直播和无人机信息
     * @param inspectionId
     * @return
     */
    JsonResult airportMsg(String inspectionId);

    /**
     * 获取最新五条数据信息
     * @return
     */
    JsonResult inspectionList();

    /**
     * 页面滑动条展示
     * @return
     */
    JsonResult getList();

    /**
     * 根据任务id和无人机id获取直播和机场内外部视频
     * @param inspectionId
     * @param droneId
     * @return
     */
    JsonResult getVideoUrl(String inspectionId, Integer droneId);
}
