using Newtonsoft.Json;

namespace Model;

public class MissionInformation
{
    [JsonProperty("任务名称")]
    public string MissionName;
    [JsonProperty("任务ID")]
    public string MissionId;
    [JsonProperty("任务主要类型")]
    public string MissionMainType;
    [JsonProperty("任务类型")]
    public string MissionType;
    [JsonProperty("任务触发器")]
    public string MissionTrigger;
    [JsonProperty("下一个任务ID")]
    public string NextTaskId;
    [JsonProperty("目标点ID")]
    public int TargetPointId;
    [JsonProperty("开始日期")]
    public string StartDate;
    [JsonProperty("开始时间")]
    public string StartTime;
    [JsonProperty("结束日期")]
    public string EndDate;
    [JsonProperty("结束时间")]
    public string EndTime;
    [JsonProperty("起飞准备时间")]
    public double TakeoffPreparationTime;
    //[JsonProperty("停止搜索时间")]
    //public double EndSearchTime;
    [JsonProperty("任务结束条件")]
    public TaskEndConditions TaskEndConditions;
    //[JsonProperty("应用航空器")]
    //public AircraftInfos[] aircraftInfos;
}

public class TaskEndConditions
{
    [JsonProperty("结束条件")]
    public string EndConditions;
    [JsonProperty("任务时间")]
    public double TaskTime;
    [JsonProperty("执行次数")]
    public double RunCount;
    [JsonProperty("投送总人数")]
    public int person_number;
}

public class AircraftInfo
{
    [JsonProperty("应用机型")]
    public string AircraftType;
    [JsonProperty("应用飞机编号")]
    public string AircraftId;
    [JsonProperty("加油基地")]
    public string RefuelingBase;
    [JsonProperty("加油基地编号")]
    public int RefuelingBaseId;
    [JsonProperty("任务结束返回点")]
    public int TaskEndReturnPoint;
}

public class MissionPoint
{
    [JsonProperty("任务点经度")]
    public double MissionPointLongitude;
    [JsonProperty("任务点纬度")]
    public double MissionPointLatitude;
    [JsonProperty("任务点海拔")]
    public double MissionPointHeight;
}

public class ZCTask
{
    [JsonProperty("任务信息")]
    public MissionInformation missionInformation;
    [JsonProperty("应用航空器")]
    public AircraftInfo[] aircraftInfos;
    [JsonProperty("侦查方式")]
    public ZCMethod[] ZCMethods;
    //[JsonProperty("矩形侦查区域边界点")]
    //public List<double[]> poly;
    //[JsonProperty("扫描线间距")]
    //public double ScanRange;
    //[JsonProperty("侦查飞行真高")]
    //public double hSC;
    //[JsonProperty("是否真实高度")]
    //public bool isRealHeight;
    //[JsonProperty("是否环绕模式")]
    //public bool isSurround;
    //[JsonProperty("环绕圈数")]
    //public int SurroundNum;
    [JsonProperty("火点ID")]
    public int FirePointId;
    public MissionPoint[] MissionPoints;
    //[JsonProperty("下一个任务ID")]
    //public string NextTaskId;
}

public class ZCMethod
{
    [JsonProperty("侦查方式")]
    public string Method;
    [JsonProperty("应用飞机编号")]
    public string AircraftId;
    [JsonProperty("矩形侦查区域边界点")]
    public List<double[]> Poly;
    [JsonProperty("扫描线间距")]
    public double ScanRange;
    [JsonProperty("侦查飞行真高")]
    public double hSC;
    [JsonProperty("是否真实高度")]
    public bool isRealHeight;
    [JsonProperty("是否环绕模式")]
    public bool isSurround;
    [JsonProperty("环绕圈数")]
    public int SurroundNum;
}

public class SHJTask
{
    [JsonProperty("任务信息")]
    public MissionInformation missionInformation;
    [JsonProperty("应用航空器")]
    public AircraftInfo[] aircraftInfos;
    [JsonProperty("索滑降参数")]
    public SHJParameter[] SHJParameters;
    //[JsonProperty("索滑降高度")]
    //public double H;
    //[JsonProperty("投送人数")]
    //public int person_number;
    //[JsonProperty("风速")]
    //public double windspeed;
    //[JsonProperty("能见度")]
    //public double vis;
    //[JsonProperty("索滑降速度")]
    //public double descendspeed;
    //[JsonProperty("转运人数")]
    //public int personNumber;
    //[JsonProperty("索滑降点")]
    //public MissionPoint[] MissionPoints;
    //[JsonProperty("下一个任务ID")]
    //public string NextTaskId;
}

public class SHJParameter
{
    [JsonProperty("应用飞机编号")]
    public string AircraftId;
    [JsonProperty("索滑降高度")]
    public double H;
    [JsonProperty("投送人数")]
    public int person_number;
    [JsonProperty("风速")]
    public double windspeed;
    [JsonProperty("能见度")]
    public double vis;
    [JsonProperty("索滑降速度")]
    public double descendspeed;
    [JsonProperty("索滑降点")]
    public MissionPoint[] MissionPoints;
}

public class DMMHTask
{
    [JsonProperty("任务信息")]
    public MissionInformation missionInformation;
    [JsonProperty("应用航空器")]
    public AircraftInfo[] aircraftInfos;
    [JsonProperty("地面部署人数")]
    public double GroundPersonnel;
    [JsonProperty("机降人数")]
    public double LandingPersonnel;
    [JsonProperty("机降点")]
    public MissionPoint[] MissionPoints;
    [JsonProperty("下一个任务ID")]
    public string NextTaskId;
}

public class AirRoute
{
    [JsonProperty("巡护航线名称")]
    public string AirRouteName;
    [JsonProperty("巡护航线点经度")]
    public double AirRouteLongitude;
    [JsonProperty("巡护航线点纬度")]
    public double AirRouteLatitude;
    [JsonProperty("巡护航线点海拔")]
    public double AirRouteHeight;
}
public class XHTask
{
    public double DelayTime;
    [JsonProperty("任务信息")]
    public MissionInformation missionInformation;
    [JsonProperty("应用航空器")]
    public AircraftInfo[] aircraftInfos;
    [JsonProperty("巡护航线参数")]
    public AirRoute[] airroute;
    [JsonProperty("火点ID")]
    public int FirePointId;
    [JsonProperty("取水点")]
    public MissionPoint[] MissionPoints;
    [JsonProperty("下一个任务ID")]
    public string NextTaskId;
}

public class MHTask
{
    [JsonProperty("任务信息")]
    public MissionInformation missionInformation;
    [JsonProperty("应用航空器")]
    public AircraftInfo[] aircraftInfos;
    [JsonProperty("取水点")]
    public MissionPoint[] MissionPoints;
    [JsonProperty("下一个任务ID")]
    public string NextTaskId;
}

public class SeaSouJiuTask
{
    [JsonProperty("任务信息")]
    public MissionInformation missionInformation;
    [JsonProperty("应用航空器")]
    public AircraftInfo[] aircraftInfos;
    [JsonProperty("战术战法")]
    public Tactic Tactic;
    [JsonProperty("运行约束")]
    public RunConstraints RunConstraints;
    //[JsonProperty("目标点ID")]
    //public int TargetPointId;
    [JsonProperty("搜索任务载荷")]
    public SearchMissionPayload[] missionSearchPayloads;
    [JsonProperty("搜索方式")]
    public SearchMissionMode[] SearchModes;
    //[JsonProperty("下一个任务ID")]
    //public string NextTaskId;
}

public class Tactic
{
    [JsonProperty("战术战法")]
    public string tactic;
    [JsonProperty("跟进间距")]
    public double Spacing;
    [JsonProperty("跟进高度差")]
    public double HeightDifference;
}

public class RunConstraints
{
    [JsonProperty("搜索飞行速度限制")]
    public double speedLimit;
}

public class SearchMissionPayload //搜索任务载荷
{
    [JsonProperty("任务载荷")]
    public string SearchPayload;
    [JsonProperty("应用飞机编号")]
    public string AircraftId;
    //探测波长(m)
    [JsonProperty("探测波长(m)")]
    public double DetectionWavelength;
    //最小可检测信号(dBm)
    [JsonProperty("最小可检测信号(dBm)")]
    public double MinDetectionSignal;
    //雷达发射机发射信号功率(dBm)
    [JsonProperty("雷达发射机发射信号功率(dBm)")]
    public double RadarTransmitterPower;
    //发射天线增益(dB)
    [JsonProperty("发射天线增益(dB)")]
    public double TransmitAntennaGain;
    //接受天线增益(dB)
    [JsonProperty("接受天线增益(dB)")]
    public double ReceiveAntennaGain;
    //光电转塔水平范围
    [JsonProperty("光电转塔水平范围")]
    public double OpticalTowerHorizontalRange;
    //红外探测器视场角
    [JsonProperty("红外探测器视场角")]
    public double InfraredDetectorFieldAngle;
    //飞行高度
    [JsonProperty("飞行高度")]
    public double FlightHeight;
}

public class SearchMissionMode //搜索方式
{
    [JsonProperty("搜索方式")]
    public string SearchMode;
    [JsonProperty("应用飞机编号")]
    public string AircraftId;
    //搜索扫视宽度
    [JsonProperty("搜索扫视宽度")]
    public double SearchWidth;
    [JsonProperty("多边形边界")]
    public List<double[]> Poly;
    [JsonProperty("等高线高度间隔")]
    public double interval;
    [JsonProperty("最小等高线节点数")]
    public int MinLength;
    [JsonProperty("航线真实高度")]
    public double TrueH;
    [JsonProperty("输出等高线节点间隔")]
    public int JG;
}

public class LandSouXunTask
{
    [JsonProperty("任务信息")]
    public MissionInformation missionInformation;
    [JsonProperty("应用航空器")]
    public AircraftInfo[] aircraftInfos;
    [JsonProperty("战术战法")]
    public Tactic Tactic;
    [JsonProperty("运行约束")]
    public RunConstraints RunConstraints;
    //搜索任务载荷
    [JsonProperty("搜索任务载荷")]
    public SearchMissionPayload[] missionSearchPayloads;
    //搜索方式
    [JsonProperty("搜索方式")]
    public SearchMissionMode[] SearchModes;
    //[JsonProperty("下一个任务ID")]
    //public string NextTaskId;
}

public class MHTaskConfig
{
    [JsonProperty("总灭火任务编号")]
    public int TotalMHId;
    [JsonProperty("火点ID")]
    public int FirePointId;
    [JsonProperty("执行次数")]
    public int RunTimes;
    [JsonProperty("吊桶洒水灭火任务")]
    public List<MHTask> mHTask = new List<MHTask>();
    [JsonProperty("机降灭火任务")]
    public List<DMMHTask> dMMHTask = new List<DMMHTask>();
    [JsonProperty("索滑降灭火任务")]
    public List<SHJTask> sHJTask = new List<SHJTask>();
}

public class TaskConfig
{
    [JsonProperty("灭火任务")]
    public List<MHTaskConfig> mHTaskConfigs = new List<MHTaskConfig>();
    [JsonProperty("火场侦查任务")]
    public List<ZCTask> zCTask = new List<ZCTask>();
    [JsonProperty("防火巡护任务")]
    public List<XHTask> xHTask = new List<XHTask>();
    [JsonProperty("海上搜救任务")]
    public List<SeaSouJiuTask> seaSouJiuTasks = new List<SeaSouJiuTask>();
    [JsonProperty("陆上搜寻任务")]
    public List<LandSouXunTask> LandSouXunTasks = new List<LandSouXunTask>();
}