using System;
using System.Collections.Generic;

using AIRuntime.Runtime.Capabilities;


namespace AIRuntime.Runtime.Agents.Permissions
{
    /// <summary>
    /// Filters capabilities according to agent permissions.
    /// </summary>
    public sealed class CapabilityFilter
    {
        public IReadOnlyList<CapabilityDescriptor> Filter(
            IReadOnlyList<CapabilityDescriptor> capabilities,
            CapabilityAccessPolicy policy)
        {
            if (capabilities == null)
            {
                throw new ArgumentNullException(
                    nameof(capabilities));
            }


            if (policy == null)
            {
                throw new ArgumentNullException(
                    nameof(policy));
            }


            List<CapabilityDescriptor> result =
                new List<CapabilityDescriptor>();


            foreach (CapabilityDescriptor capability in capabilities)
            {
                if (policy.CanUse(
                        capability.Name))
                {
                    result.Add(
                        capability);
                }
            }


            return result;
        }
    }
}