using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Options;
using StellaOps.Aoc;
namespace StellaOps.Concelier.Core.Aoc;
public static class AocServiceCollectionExtensions
{
    /// 
    /// Registers Aggregation-Only Contract guard services for raw advisory ingestion.
    /// 
    /// Service collection to configure.
    /// Optional guard configuration.
    public static IServiceCollection AddConcelierAocGuards(
        this IServiceCollection services,
        Action? configure = null)
    {
        if (services is null)
        {
            throw new ArgumentNullException(nameof(services));
        }
        services.AddAocGuard();
        if (configure is not null)
        {
            services.Configure(configure);
        }
        services.TryAddSingleton(sp =>
        {
            var guard = sp.GetRequiredService();
            var options = sp.GetService>();
            return new AdvisoryRawWriteGuard(guard, options);
        });
        return services;
    }
}