using System;
using System.Threading.Tasks;

namespace AIRuntime.Runtime.Capabilities
{
    /// <summary>
    /// Validates capability arguments before execution.
    /// Stops the pipeline immediately if validation fails.
    /// </summary>
    public sealed class ValidationMiddleware : ICapabilityMiddleware
    {
        public async Task InvokeAsync(
            CapabilityContext context,
            CapabilityDelegate next)
        {
            if (context == null)
                throw new ArgumentNullException(nameof(context));

            // Nothing to validate.
            if (context.Arguments == null)
            {
                await next(context);
                return;
            }

            // Validate using the full capability context.
            await CapabilityValidator.ValidateAsync(context);

            // Continue executing the pipeline.
            await next(context);
        }
    }
}