package com.ruoyi.dj.mqtt.domain;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;

@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class OSDMessage3 {
    private String tid;
    private String bid;
    private long timestamp;

    private DataField data;

    @Data
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class DataField {
        private NetworkState network_state;  // 网络状态
        private DroneChargeState drone_charge_state;  // 飞行器充电状态
        private int drone_in_dock;  // 飞行器是否在舱
        private int rainfall;  // 降雨量
        private float wind_speed;  // 风速
        private float environment_temperature;  // 环境温度
        private float temperature;  // 舱内温度
        private int humidity;  // 舱内湿度
        private float heading;  // 航向
        private int home_position_is_valid;  // Home 位置是否有效
        private double latitude;  // 纬度
        private double longitude;  // 经度
        private float height;  // 椭球高度
        private AlternateLandPoint alternate_land_point;  // 备降点
        private long first_power_on;  // 首次上电时间
        private PositionState position_state;  // 搜星状态
        private Storage storage;  // 存储容量
        private int mode_code;  // 机场状态
        private int cover_state;  // 舱盖状态
        private int silent_mode;  // 静音模式
        private int supplement_light_state;  // 补光灯状态
        private int emergency_stop_state;  // 紧急停止按钮状态
        private AirConditioner air_conditioner;  // 空调信息
        private int battery_store_mode;  // 电池运行模式
        private int alarm_state;  // 机场声光报警状态
        private int putter_state;  // 推杆状态
        private SubDevice sub_device;  // 子设备状态

        @Data
        public static class NetworkState {
            private int type;  // 网络类型
            private int quality;  // 网络质量
            private float rate;  // 网络速率
        }

        @Data
        public static class DroneChargeState {
            private int state;  // 充电状态
            private int capacity_percent;  // 电量百分比
        }

        @Data
        public static class AlternateLandPoint {
            private double latitude;  // 备降点纬度
            private double longitude;  // 备降点经度
            private float height;  // 备降点高度
            private float safe_land_height;  // 安全高度
            private int is_configured;  // 是否设置备降点
        }

        @Data
        public static class PositionState {
            private int is_calibration;  // 是否标定
            private int is_fixed;  // 是否收敛
            private int quality;  // 搜星档位
            private int gps_number;  // GPS 搜星数量
            private int rtk_number;  // RTK 搜星数量
        }

        @Data
        public static class Storage {
            private int total;  // 总容量
            private int used;  // 已使用容量
        }

        @Data
        public static class AirConditioner {
            private int air_conditioner_state;  // 空调状态
            private long switch_time;  // 空调开关时间
        }

        @Data
        public static class SubDevice {
            private String device_sn;  // 子设备序列号
            private String device_model_key;  // 子设备型号键
            private int device_online_status;  // 子设备在线状态
            private int device_paired;  // 子设备对频状态
        }
    }
}
