using System.Collections.Generic;

namespace HPJ.Simulation.Utilities
{
    [System.Serializable]
    public class Pool<T>
    {
        public List<T> Active;
        public List<T> Inactive;

        public Pool()
        {
            Active = new List<T>();
            Inactive = new List<T>();
        }

        public T GetItem()
        {
            if (Inactive.Count > 0)
            {
                T Item = Inactive[0];
                Inactive.RemoveAt(0);
                return Item;
            }

            return default(T);
        }

        public void ReturnItem(T Item)
        {
            if (Active.Contains(Item))
            {
                Active.Remove(Item);
                Inactive.Add(Item);
            }
        }

        public void AddItem(T Item, bool AddToActiveList = true)
        {
            if (AddToActiveList)
            {
                Active.Add(Item);
            }
            else
            {
                Inactive.Add(Item);
            }
        }

        public void ReturnAll()
        {
            for (int i = 0; i < Active.Count; i++)
            {
                Inactive.Add(Active[i]);
            }
            Active.Clear();
        }
    }
}