📄 src/Integrations/Vasttrafik/ServiceCollectionExtensions.cs
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;

namespace MMirror.Integrations.Vasttrafik;

public static class ServiceCollectionExtensions
{
    extension(IServiceCollection services)
    {
        public IServiceCollection AddVasttrafikServices()
        {
            services.AddMemoryCache();

            services.AddOptions<ClientOptions>().BindConfiguration("Vasttrafik").ValidateOnStart();
            services.AddTransient<IValidateOptions<ClientOptions>, ClientOptionsValidator>();

            services
                .AddHttpClient<OAuth2Handler>()
                .ConfigureHttpClient(
                    (sp, client) =>
                        client.BaseAddress = sp.GetRequiredService<IOptions<ClientOptions>>().Value.BaseAddress
                );

            services
                .AddHttpClient<VasttrafikClient>()
                .AddHttpMessageHandler<OAuth2Handler>()
                .ConfigureHttpClient(
                    (sp, client) =>
                        client.BaseAddress = sp.GetRequiredService<IOptions<ClientOptions>>().Value.BaseAddress
                );

            return services;
        }
    }
}