📄 src/Infrastructure/YouTube/ServiceCollectionExtensions.cs
using Google.Apis.Services;
using Google.Apis.YouTube.v3;
using Microsoft.Extensions.DependencyInjection;
using Slopper.Domain;

namespace Slopper.Infrastructure.YouTube;

public static class ServiceCollectionExtensions
{
    extension(IServiceCollection services)
    {
        public IServiceCollection AddYouTubeUploader()
        {
            services.AddTransient<HttpClientInitializer>();

            services.AddTransient(sp => new YouTubeService(
                new BaseClientService.Initializer
                {
                    HttpClientInitializer = sp.GetRequiredService<HttpClientInitializer>(),
                }
            ));

            services.AddKeyedTransient<IUploader, YouTubeUploader>("YouTube");

            return services;
        }
    }
}