using static Fire;

namespace SimulationServer;

public class SJAllTotalTaskPerformance
{
    public string 识别成功率;
    public string 任务准备时间;
    public string 平均搜索时间;
    public string 平均救助时间;
    public string 总飞行时间;
    public string 海上搜索覆盖面积;
    public string 任务是否成功;
    public string 人员存活率;
    public string 环境搜索覆盖面积;
}

public class SJAllTotalTaskPerformanceComponent
{
    public SJAllTotalTaskPerformance SSJAllTotalTaskPerformance = new SJAllTotalTaskPerformance();
    public SJAllTotalTaskPerformance LSJAllTotalTaskPerformance = new SJAllTotalTaskPerformance();
    public int sIndex;
    public int lIndex;

    public void FillData(List<SeaSJRescueMission> missions)
    {
        double 任务准备时间 = 0;
        double 平均搜索时间 = 0;
        double 总飞行时间 = 0;
        double 人员存活率 = 0;
        double 任务是否成功 = 0;
        float 识别成功率 = 0f;
        double 平均救助时间 = 0;
        float 人员数量 = 0;


        double aircreftCount = 0;
        foreach (SeaSJRescueMission mhRescueMission in missions)
        {
            //foreach (var aircraft in mhRescueMission.aircrafts)
            //{
            //    if (aircraft.isseePerson)
            //        识别成功率 += 1f;
            //    if (任务准备时间 < aircraft.TaskReadyTime)
            //        任务准备时间 = aircraft.TaskReadyTime;
            //    平均搜索时间 += aircraft.SearchTime;
            //    总飞行时间 += aircraft.TotalTime;
            //    人员存活率 += aircraft.Success ? 1 : 0;
            //    aircreftCount++;
            //}
            foreach (var item in mhRescueMission.aircraftSJDatas)
            {
                识别成功率 += float.Parse(item.Value["识别成功率"][sIndex]);
                人员数量 += float.Parse(item.Value["人员数量"][sIndex]);
                if (任务准备时间 < float.Parse(item.Value["任务准备时间"][sIndex]))
                    任务准备时间 = float.Parse(item.Value["任务准备时间"][sIndex]);
                平均搜索时间 += float.Parse(item.Value["平均搜索时间"][sIndex]);
                平均救助时间 += float.Parse(item.Value["平均救助时间"][sIndex]);
                总飞行时间 += float.Parse(item.Value["总飞行时间"][sIndex]);
                人员存活率 += float.Parse(item.Value["人员存活率"][sIndex]);
                aircreftCount++;
            }

        }
        if (人员存活率 != 0)
            任务是否成功 = 1;
        SSJAllTotalTaskPerformance.识别成功率 = (识别成功率 / 人员数量).ToString();
        SSJAllTotalTaskPerformance.任务准备时间 = 任务准备时间.ToString();
        SSJAllTotalTaskPerformance.平均搜索时间 = (平均搜索时间 / aircreftCount).ToString("f4");
        SSJAllTotalTaskPerformance.平均救助时间 = (平均救助时间 / aircreftCount).ToString("f4");
        SSJAllTotalTaskPerformance.总飞行时间 = 总飞行时间.ToString("f4");
        SSJAllTotalTaskPerformance.海上搜索覆盖面积 = "0.6".ToString();//"60%"
        SSJAllTotalTaskPerformance.任务是否成功 = 任务是否成功.ToString();
        SSJAllTotalTaskPerformance.人员存活率 = (人员存活率 / 人员数量).ToString();
        sIndex++;
    }

    public void FillData1(List<LandSJRescueMission> missions)
    {
        double 任务准备时间 = 0;
        double 平均搜索时间 = 0;
        double 总飞行时间 = 0;
        double 人员存活率 = 0;
        double 任务是否成功 = 0;
        float 识别成功率 = 0f;
        double 平均救助时间 = 0;
        float 人员数量 = 0;


        double aircreftCount = 0;
        foreach (LandSJRescueMission mhRescueMission in missions)
        {
            //foreach (var aircraft in mhRescueMission.aircrafts)
            //{
            //    if (aircraft.isseePerson)
            //        识别成功率 += 1f;
            //    if (任务准备时间 < aircraft.TaskReadyTime)
            //        任务准备时间 = aircraft.TaskReadyTime;
            //    平均搜索时间 += aircraft.SearchTime;
            //    总飞行时间 += aircraft.TotalTime;
            //    人员存活率 += aircraft.Success ? 1 : 0;
            //    aircreftCount++;
            //}
            foreach (var item in mhRescueMission.aircraftSJDatas)
            {
                识别成功率 += float.Parse(item.Value["识别成功率"][lIndex]);
                人员数量 += float.Parse(item.Value["人员数量"][sIndex]);
                if (任务准备时间 < float.Parse(item.Value["任务准备时间"][lIndex]))
                    任务准备时间 = float.Parse(item.Value["任务准备时间"][lIndex]);
                平均搜索时间 += float.Parse(item.Value["平均搜索时间"][lIndex]);
                平均救助时间 += float.Parse(item.Value["平均救助时间"][sIndex]);
                总飞行时间 += float.Parse(item.Value["总飞行时间"][lIndex]);
                人员存活率 += float.Parse(item.Value["人员存活率"][lIndex]);
                aircreftCount++;
            }

        }
        if (人员存活率 != 0)
            任务是否成功 = 1;
        LSJAllTotalTaskPerformance.识别成功率 = (识别成功率 / 人员数量).ToString();
        LSJAllTotalTaskPerformance.任务准备时间 = 任务准备时间.ToString();
        LSJAllTotalTaskPerformance.平均搜索时间 = (平均搜索时间 / aircreftCount).ToString("f4");
        LSJAllTotalTaskPerformance.平均救助时间 = (平均救助时间 / aircreftCount).ToString();
        LSJAllTotalTaskPerformance.总飞行时间 = 总飞行时间.ToString("f4");
        LSJAllTotalTaskPerformance.环境搜索覆盖面积 = "0.6".ToString();//"60%"
        LSJAllTotalTaskPerformance.任务是否成功 = 任务是否成功.ToString();
        LSJAllTotalTaskPerformance.人员存活率 = (人员存活率 / 人员数量).ToString();
        lIndex++;
    }

    public Dictionary<string, Dictionary<string, string>> GetReport()
    {
        Dictionary<string, Dictionary<string, string>> report = new Dictionary<string, Dictionary<string, string>>();
        report["总任务表现"] = new Dictionary<string, string>
        {
            { "识别成功率", SSJAllTotalTaskPerformance.识别成功率.ToString() },
            { "任务准备时间", SSJAllTotalTaskPerformance.任务准备时间.ToString() },
            { "平均搜索时间", SSJAllTotalTaskPerformance.平均搜索时间.ToString() },
            { "平均救助时间", SSJAllTotalTaskPerformance.平均救助时间.ToString() },
            { "总飞行时间", SSJAllTotalTaskPerformance.总飞行时间.ToString() },
            { "海情覆盖率", SSJAllTotalTaskPerformance.海上搜索覆盖面积.ToString() },
            { "任务是否成功", SSJAllTotalTaskPerformance.任务是否成功.ToString() },
            { "人员存活率", SSJAllTotalTaskPerformance.人员存活率.ToString() }
        };
        return report;
    }

    public Dictionary<string, Dictionary<string, string>> GetReport1()
    {
        Dictionary<string, Dictionary<string, string>> report = new Dictionary<string, Dictionary<string, string>>();
        report["总任务表现"] = new Dictionary<string, string>
        {
            { "识别成功率", LSJAllTotalTaskPerformance.识别成功率.ToString() },
            { "任务准备时间", LSJAllTotalTaskPerformance.任务准备时间.ToString() },
            { "平均搜索时间", LSJAllTotalTaskPerformance.平均搜索时间.ToString() },
            { "平均救助时间", LSJAllTotalTaskPerformance.平均救助时间.ToString() },
            { "总飞行时间", LSJAllTotalTaskPerformance.总飞行时间.ToString() },
            { "环境覆盖率", LSJAllTotalTaskPerformance.环境搜索覆盖面积.ToString() },
            { "任务是否成功", LSJAllTotalTaskPerformance.任务是否成功.ToString() },
            { "人员存活率", LSJAllTotalTaskPerformance.人员存活率.ToString() }
        };
        return report;
    }
}