using Jellyfin.Data.Events;
using Jellyfin.Data.Events.System;
using Jellyfin.Data.Events.Users;
using Jellyfin.Server.Implementations.Events.Consumers.Library;
using Jellyfin.Server.Implementations.Events.Consumers.Security;
using Jellyfin.Server.Implementations.Events.Consumers.Session;
using Jellyfin.Server.Implementations.Events.Consumers.System;
using Jellyfin.Server.Implementations.Events.Consumers.Updates;
using Jellyfin.Server.Implementations.Events.Consumers.Users;
using MediaBrowser.Common.Updates;
using MediaBrowser.Controller.Authentication;
using MediaBrowser.Controller.Events;
using MediaBrowser.Controller.Events.Session;
using MediaBrowser.Controller.Events.Updates;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Session;
using MediaBrowser.Controller.Subtitles;
using MediaBrowser.Model.Tasks;
using Microsoft.Extensions.DependencyInjection;
namespace Jellyfin.Server.Implementations.Events
{
    /// 
    /// A class containing extensions to  for eventing.
    /// 
    public static class EventingServiceCollectionExtensions
    {
        /// 
        /// Adds the event services to the service collection.
        /// 
        /// The service collection.
        public static void AddEventServices(this IServiceCollection collection)
        {
            // Library consumers
            collection.AddScoped, SubtitleDownloadFailureLogger>();
            // Security consumers
            collection.AddScoped>, AuthenticationFailedLogger>();
            collection.AddScoped>, AuthenticationSucceededLogger>();
            // Session consumers
            collection.AddScoped, PlaybackStartLogger>();
            collection.AddScoped, PlaybackStopLogger>();
            collection.AddScoped, SessionEndedLogger>();
            collection.AddScoped, SessionStartedLogger>();
            // System consumers
            collection.AddScoped, PendingRestartNotifier>();
            collection.AddScoped, TaskCompletedLogger>();
            collection.AddScoped, TaskCompletedNotifier>();
            // Update consumers
            collection.AddScoped, PluginInstallationCancelledNotifier>();
            collection.AddScoped, PluginInstallationFailedLogger>();
            collection.AddScoped, PluginInstallationFailedNotifier>();
            collection.AddScoped, PluginInstalledLogger>();
            collection.AddScoped, PluginInstalledNotifier>();
            collection.AddScoped, PluginInstallingNotifier>();
            collection.AddScoped, PluginUninstalledLogger>();
            collection.AddScoped, PluginUninstalledNotifier>();
            collection.AddScoped, PluginUpdatedLogger>();
            // User consumers
            collection.AddScoped, UserCreatedLogger>();
            collection.AddScoped, UserDeletedLogger>();
            collection.AddScoped, UserDeletedNotifier>();
            collection.AddScoped, UserLockedOutLogger>();
            collection.AddScoped, UserPasswordChangedLogger>();
            collection.AddScoped, UserUpdatedNotifier>();
        }
    }
}