using KYFramework;
using Model;
using Unity.Mathematics;
using Random = System.Random;

namespace SimulationServer;

public class XHTotalTaskPerformance
{
    public string 总巡护耗时;
    public string 火情入场时间;
    public string 昼间空间覆盖率;
    public string 夜间空间覆盖率;
    public string 综合虚警概率;
    public string 空间遗漏概率;
}


public class XHTotalTaskPerformanceComponent : Component
{
    public XHTotalTaskPerformance XhTotalTaskPerformance = new XHTotalTaskPerformance();
    
    public void FillData()
    {
        var mission = GetParent<XHRescueMission>();

        double time = 0;
        foreach (var ai in mission.AircraftXHs)
        {
            time += ai.TotalTime;
        }
        
        var aircraft = mission.AircraftXHs.First();
        
        XhTotalTaskPerformance.总巡护耗时 = time.ToString();
        XhTotalTaskPerformance.火情入场时间 = aircraft.FireEnterTime.ToString();
        
        List<double3> points = new List<double3>();
        foreach (AirRoute airRoute in aircraft.FlightPlanEditor.airroute)
        {
            points.Add(new double3(airRoute.AirRouteLongitude, airRoute.AirRouteLatitude, airRoute.AirRouteHeight));
        }

        var temp = Utility.GetArea(points)/24000000000;
        var temp1 = (temp * 100).ToString("#0.00")+ "%";
        XhTotalTaskPerformance.昼间空间覆盖率 = temp1;
        XhTotalTaskPerformance.夜间空间覆盖率 = aircraft.Name == "AR500" ? temp1 : 0.ToString();
        XhTotalTaskPerformance.综合虚警概率 = new Random().NextInt64(5, 15) + "%";
        XhTotalTaskPerformance.空间遗漏概率 = ((mission.FailureTimes/mission.ExcuteCount) * 100).ToString("#0.00") + "%";
    }
    
    public Dictionary<string, Dictionary<string, string>> GetReport()
    {
        Dictionary<string, Dictionary<string, string>> report = new Dictionary<string, Dictionary<string, string>>();
        report["总任务表现"] = new Dictionary<string, string>
        {
            { "总巡护耗时/s", XhTotalTaskPerformance.总巡护耗时.ToString() },
            { "火情入场时间/s", XhTotalTaskPerformance.火情入场时间.ToString() },
            { "昼间空间覆盖率/-", XhTotalTaskPerformance.昼间空间覆盖率.ToString() },
            { "夜间空间覆盖率/-", XhTotalTaskPerformance.夜间空间覆盖率.ToString() },
            { "综合虚警概率/-", XhTotalTaskPerformance.综合虚警概率.ToString() },
            { "空间遗漏概率/-", XhTotalTaskPerformance.空间遗漏概率.ToString() }
        };
        return report;
    }
}