using System;
using System.Linq;
using System.Reflection;
using Autofac;

namespace NzbDrone.Common
{
    public static class CommonContainerExtensions
    {
        public static void RegisterCommonServices(this ContainerBuilder containerBuilder)
        {
            containerBuilder.RegisterAssemblyTypes("NzbDrone.Common");
        }

        public static void RegisterAssemblyTypes(this ContainerBuilder containerBuilder, string assemblyName)
        {
            var apiAssembly = Assembly.Load(assemblyName);

            if (apiAssembly == null)
            {
                throw new ApplicationException("Couldn't load assembly " + assemblyName);
            }

            containerBuilder.RegisterAssemblyTypes(apiAssembly)
                .AsImplementedInterfaces()
                .SingleInstance();

            containerBuilder.RegisterAssemblyTypes(apiAssembly)
                .AsSelf()
                .SingleInstance();
        }
    }
}