package com.ruoyi.dj.mqtt.dto;

import lombok.Data;

/**
 * @auther 周志雄
 * @date 2024/7/15 14:39
 */

@Data
public class FlightTaskParam {
    private String flightId; // 计划 ID
    private Long executeTime; // 任务开始执行时间毫秒时间戳。可选字段。当 task_type 为 0 或 1 时必填，为 2 时非必填。
    private Long taskType; // 任务类型，0: 立即任务，1: 定时任务，2: 条件任务
    private File file; // 航线文件对象
    private ReadyConditions readyConditions; // 任务就绪条件【暂不需要】
    private ExecutableConditions executableConditions; // 任务执行条件【暂不需要】
    private BreakPoint breakPoint; // 航线断点信息【暂不需要】
    private Integer rthAltitude; // 返航高度
    private Integer rthMode; // 返航高度模式
    private Integer outOfControlAction; // 遥控器失控动作、文档说默认值是0
    private Integer exitWaylineWhenRcLost; // 航线失控动作
    private Integer waylinePrecisionType; // 航线精度类型
    private SimulateMission simulateMission; // 是否在模拟器中执行任务【暂不需要】

    @Data
    public static class File {
        private String url; // 文件 URL
        private String fingerprint; // 文件 MD5 签名
    }

    @Data
    public static class ReadyConditions {
        private Integer batteryCapacity; // 电池容量百分比阈值
        private Long beginTime; // 任务可执行时段的开始时间毫秒时间戳
        private Long endTime; // 任务可执行时段的结束时间毫秒时间戳
    }

    @Data
    public static class ExecutableConditions {
        private Integer storageCapacity; // 存储容量
    }

    @Data
    public static class BreakPoint {
        private Integer index; // 断点序号
        private Integer state; // 断点状态，0: 在航段上，1: 在航点上
        private Float progress; // 当前航段进度
        private Integer waylineId; // 航线 ID
    }

    @Data
    public static class SimulateMission {
        private Integer isEnable; // 是否开启模拟器任务
        private Double latitude; // 纬度
        private Double longitude; // 经度
    }
}
