namespace Unity.VisualScripting
{
    public class VariantKeyedCollection<TBase, TImplementation, TKey> :
        VariantCollection<TBase, TImplementation>,
        IKeyedCollection<TKey, TBase>
        where TImplementation : TBase
    {
        public VariantKeyedCollection(IKeyedCollection<TKey, TImplementation> implementation) : base(implementation)
        {
            this.implementation = implementation;
        }

        public TBase this[TKey key] => implementation[key];

        public new IKeyedCollection<TKey, TImplementation> implementation { get; private set; }

        public bool TryGetValue(TKey key, out TBase value)
        {
            TImplementation implementationValue;
            var result = implementation.TryGetValue(key, out implementationValue);
            value = implementationValue;
            return result;
        }

        public bool Contains(TKey key)
        {
            return implementation.Contains(key);
        }

        public bool Remove(TKey key)
        {
            return implementation.Remove(key);
        }

        TBase IKeyedCollection<TKey, TBase>.this[int index] => implementation[index];
    }
}