using System;
using System.Collections.Generic;
using AIRuntime.Runtime.Agents.Runtime;
using AIRuntime.Runtime.Capabilities;


namespace AIRuntime.Runtime.Agents.Permissions
{
    /// <summary>
    /// Resolves the capabilities available to a specific agent.
    /// </summary>
    public sealed class AgentCapabilityResolver
    {
        private readonly CapabilityFilter _filter;


        public AgentCapabilityResolver()
        {
            _filter =
                new CapabilityFilter();
        }


        public IReadOnlyList<CapabilityDescriptor> Resolve(
            AgentRuntimeContext context,
            IReadOnlyList<CapabilityDescriptor> capabilities)
        {
            if (context == null)
            {
                throw new ArgumentNullException(
                    nameof(context));
            }


            return _filter.Filter(
                capabilities,
                context.CapabilityPolicy);
        }
    }
}