using KYFramework;
using Model;
using SimulationServer.Utils;
using Define = SimulationServer.Utils.Define;

namespace SimulationServer;

public class AircraftJJ : AircraftEntity
{
    public string NextMissionId; // 下一个任务ID
    public MissionEndPoint missionEndPoint = new MissionEndPoint();

    public int LandingPersonnel; //personCount
    public MHRescueMission mhRescueMission;

    public int landingPoint = 0; // 任务文件获取

    public JJJYTask taskContent;
    public TaskParameter taskParameter;
    public RescueDemandInfo rescueDemandInfo;
    public bool IsOver;
    public bool Success;

    public override void End()
    {
        TotalFuelConsumption = TurningPoints[0].RemainingFuel - TurningPoints[^1].RemainingFuel;
    }

    public override void Reset()
    {
        base.Reset();
        IsOver = false;
        Success = false;
        TotalTime = 0;
    }
    public override void Start()
    {
        FlightPlanEditor.missionpoint.MissionPointLatitude = rescueDemandInfo.TargetPointLatitude;
        FlightPlanEditor.missionpoint.MissionPointLongitude = rescueDemandInfo.TargetPointLongitude;
        FlightPlanEditor.missionpoint.MissionPointHeight = rescueDemandInfo.TargetPointHeight;

        missionEndPoint.MissionEndPointLatitude = FlightPlanEditor.missionpoint.MissionPointLatitude;
        missionEndPoint.MissionEndPointLongitude = FlightPlanEditor.missionpoint.MissionPointLongitude;
        missionEndPoint.MissionEndPointHeight = FlightPlanEditor.missionpoint.MissionPointHeight;

        FXJHGenerate.FromStartToMission(FlightPlanEditor, ref TurningPoints);//生成从起点到任务段起点的航路点

        int TransportNumber = (int)Math.Ceiling(taskParameter.LandingPersonnel / FlightPlanEditor.aircraftparameter.MaxPassengerNumber);

        int j = 0;


        for (int i = 0; i < TransportNumber; i++)
        {
            if (i == 0)
            {
                FXJHGenerate.JijiangJiuYuan1(FlightPlanEditor, ref TurningPoints);
            }
            else
            {
                FXJHGenerate.JijiangJiuYuan(FlightPlanEditor, ref TurningPoints);
                j += 2;
            }

        }
        // FXJHGenerate.InitializeVelocities(FlightPlanEditor, TurningPoints, ref Velocitys);
        // FXJHGenerate.InitializeFuelConsumptions(FlightPlanEditor, TurningPoints,ref FuelConsumptions);

        FXJHGenerate.FromMissionToEnd(FlightPlanEditor, missionEndPoint, ref TurningPoints);
        FXJHGenerate.FXJHTPDiedai(FlightPlanEditor, ref TurningPoints, Velocitys, FuelConsumptions); // 更新了 计算油耗的方法

        for (int i = 0; i < TurningPoints.Count; i++) // 总飞行时间
        {
            TotalTime += TurningPoints[i].SegmentFlightTime; // 总时间   //仿真轮次1 数值1
            //Console.WriteLine("TotalTime:" + TotalTime);
        }
        Console.WriteLine("TotalTime:" + TotalTime);
        IsOver = true;
        //Success = true; //需要判断
        End();
    }

    //private double GetDistance(double lon1, double lon2, double lat1, double lat2)
    //{
    //    double R = 6371; // 地球的半径(公里)
    //    double dLat = (lat2 - lat1) * Math.PI / 180.0;
    //    double dLon = (lon2 - lon1) * Math.PI / 180.0;
    //    double a = Math.Sin(dLat / 2) * Math.Sin(dLat / 2) +
    //               Math.Cos(lat1 * Math.PI / 180.0) * Math.Cos(lat2 * Math.PI / 180.0) *
    //               Math.Sin(dLon / 2) * Math.Sin(dLon / 2);
    //    double c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));
    //    double distance = R * c;

    //    return distance;
    //}

    public override void Update(double time)
    {

    }
}


[ObjectSystem]
public class AircraftJJAwakeSystem : AwakeSystem<AircraftJJ, FlightPlanEditor>
{
    public override void Awake(AircraftJJ self, FlightPlanEditor flightPlanEditor)
    {
        self.FlightPlanEditor = flightPlanEditor;
        self.Awake();
    }
}