📄 src/Integrations/HomeAssistant/ServiceCollectionExtensions.cs
using System.Net.Http.Headers;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;

namespace MMirror.Integrations.HomeAssistant;

public static class ServiceCollectionExtensions
{
    extension(IServiceCollection services)
    {
        public IServiceCollection AddHomeAssistantServices()
        {
            services.AddOptions<HomeAssistantOptions>().BindConfiguration("HomeAssistant").ValidateOnStart();
            services.AddTransient<IValidateOptions<HomeAssistantOptions>, HomeAssistantOptionsValidator>();

            services
                .AddHttpClient<HomeAssistantClient>()
                .ConfigureHttpClient(
                    (sp, client) =>
                    {
                        var homeAssistantOptions = sp.GetRequiredService<IOptions<HomeAssistantOptions>>().Value;
                        client.BaseAddress = homeAssistantOptions.BaseAddress;
                        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
                            "Bearer",
                            homeAssistantOptions.Token
                        );
                    }
                )
                .AddStandardResilienceHandler();

            return services;
        }
    }
}