using System;
using System.Collections.ObjectModel;

namespace Unity.VisualScripting
{
    public class GuidCollection<T> : KeyedCollection<Guid, T>, IKeyedCollection<Guid, T> where T : IIdentifiable
    {
        protected override Guid GetKeyForItem(T item)
        {
            return item.guid;
        }

        protected override void InsertItem(int index, T item)
        {
            Ensure.That(nameof(item)).IsNotNull(item);

            base.InsertItem(index, item);
        }

        protected override void SetItem(int index, T item)
        {
            Ensure.That(nameof(item)).IsNotNull(item);

            base.SetItem(index, item);
        }

        public new bool TryGetValue(Guid key, out T value)
        {
            if (Dictionary == null)
            {
                value = default(T);
                return false;
            }

            return Dictionary.TryGetValue(key, out value);
        }
    }
}