using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 作战部署中力量列表数据层
/// </summary>
public class FireEnginesData
{
    public static readonly FireEnginesData Instance = new FireEnginesData();

    //每个中队的消防员人数
    private Dictionary<string, int> Persons = new Dictionary<string, int>();

    //按中队、车类型组织车辆数据(string:组织机构;List<KeyValuePair<FireCarEngine, int>:某类型车有多少辆)
    private Dictionary<string, List<KeyValuePair<FireCarEngine, int>>> DeptCars =
        new Dictionary<string, List<KeyValuePair<FireCarEngine, int>>>();

    public void AddDeptCar(KeyValuePair<string, List<KeyValuePair<FireCarEngine, int>>> deptCars)
    {
        List<KeyValuePair<FireCarEngine, int>> typeCars = new List<KeyValuePair<FireCarEngine, int>>();
        if (DeptCars.TryGetValue(deptCars.Key , out typeCars))
        {
            foreach (KeyValuePair<FireCarEngine, int> item in deptCars.Value)
            {
                AddCar(typeCars,item, deptCars.Key);
            }
        }
        else
        {
            DeptCars.Add(deptCars.Key, deptCars.Value);

            foreach (KeyValuePair<FireCarEngine, int> item in deptCars.Value)
            {
                UpdatePersons(deptCars.Key, item);
            }
        }
    }

    public void AddCar(List<KeyValuePair<FireCarEngine, int>> TypeCars, KeyValuePair<FireCarEngine, int> car, string orgName)
    {
        for (int i = 0; i < TypeCars.Count; i++)
        {
            if (TypeCars[i].Key.TypeName == car.Key.TypeName)
            {
                TypeCars[i] = new KeyValuePair<FireCarEngine, int>(TypeCars[i].Key, TypeCars[i].Value + car.Value);
                UpdatePersons(orgName, car);
            }
        }

        List<string> keys = new List<string>();
        foreach (KeyValuePair<FireCarEngine, int> item in TypeCars)
        {
            keys.Add(item.Key.TypeName);
        }

        if (!keys.Contains(car.Key.TypeName))
        {
            TypeCars.Add(car);

            UpdatePersons(orgName, car);
        }
    }

    private void UpdatePersons(string orgName, KeyValuePair<FireCarEngine, int> car)
    {
        //加车的同时更新人数
        if (Persons.ContainsKey(orgName))
        {
            for (int i = 0; i < car.Value; i++)
            {
                Persons[orgName] +=
                (int)(car.Key.PassengerCapacity);
            }
        }
        else
        {
            int typeCarPersons = 0;
            for (int i = 0; i < car.Value; i++)
            {
                typeCarPersons +=
                (int)(car.Key.PassengerCapacity);
            }

            Persons.Add(orgName, typeCarPersons);
        }
    }

    public Dictionary<string, List<KeyValuePair<FireCarEngine, int>>> GetAllCas()
    {
        return DeptCars;
    }

    public void RemoveCar(string orgName, string carType)
    {
        List<KeyValuePair<FireCarEngine, int>> typeCars = new List<KeyValuePair<FireCarEngine, int>>();
        if (DeptCars.TryGetValue(orgName, out typeCars))
        {
            for (int i = 0; i < typeCars.Count; i++)
            {
                if (typeCars[i].Key.TypeName == carType)
                {
                    typeCars[i] = new KeyValuePair<FireCarEngine, int>(typeCars[i].Key, typeCars[i].Value - 1);
                }
            }
        }
    }

    public Dictionary<string, int> GetAllPersons()
    {
        return Persons;
    }
    public void FireEnginesDataResert() 
    {

        Persons.Clear();
        DeptCars.Clear();
    }
}