using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using NetworkResurrector.WakeOnLan.Inhouse;
using NetworkResurrector.WakeOnLan.Nikeee;
using System;

namespace NetworkResurrector.Server.Extensions
{
    public static class WakeOnLanExtensions
    {
        private struct WolProvider
        {
            public const string
                Inhouse = "Inhouse",
                Nikeee = "Nikeee";
        }

        public static void AddWakeOnLan(this IServiceCollection services, IConfiguration configuration)
        {
            var wolProvider = configuration.GetSection("WakeOnLan").GetSection("Provider").GetValue<string>("Use");

            switch (wolProvider)
            {
                case WolProvider.Inhouse:
                    services.AddWakeOnLanInhouseService();
                    break;

                case WolProvider.Nikeee:
                    services.AddWakeOnLanNikeeeService();
                    break;

                default:
                    throw new Exception($"Wake on LAN provider '{wolProvider}' is not implemented.");
            }
        }
    }
}
