using MediaBrowser.Common.Plugins;
using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.System;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace MediaBrowser.Common.Kernel
{
    /// 
    /// Interface IKernel
    /// 
    public interface IKernel
    {
        /// 
        /// Gets the application paths.
        /// 
        /// The application paths.
        IApplicationPaths ApplicationPaths { get; }
        /// 
        /// Gets the configuration.
        /// 
        /// The configuration.
        BaseApplicationConfiguration Configuration { get; }
        /// 
        /// Gets the kernel context.
        /// 
        /// The kernel context.
        KernelContext KernelContext { get; }
        /// 
        /// Inits this instance.
        /// 
        /// Task.
        Task Init();
        /// 
        /// Gets or sets a value indicating whether this instance has pending kernel reload.
        /// 
        /// true if this instance has pending kernel reload; otherwise, false.
        bool HasPendingRestart { get; }
        /// 
        /// Disposes this instance.
        /// 
        void Dispose();
        /// 
        /// Gets the system status.
        /// 
        /// SystemInfo.
        SystemInfo GetSystemInfo();
        /// 
        /// Reloads the logger.
        /// 
        void ReloadLogger();
        /// 
        /// Called when [application updated].
        /// 
        /// The new version.
        void OnApplicationUpdated(Version newVersion);
        /// 
        /// Gets the name of the web application.
        /// 
        /// The name of the web application.
        string WebApplicationName { get; }
        /// 
        /// Performs the pending restart.
        /// 
        void PerformPendingRestart();
        /// 
        /// Gets the plugins.
        /// 
        /// The plugins.
        IEnumerable Plugins { get; }
        /// 
        /// Gets the UDP server port number.
        /// 
        /// The UDP server port number.
        int UdpServerPortNumber { get; }
        /// 
        /// Gets the HTTP server URL prefix.
        /// 
        /// The HTTP server URL prefix.
        string HttpServerUrlPrefix { get; }
        /// 
        /// Gets the TCP manager.
        /// 
        /// The TCP manager.
        IServerManager ServerManager { get; }
        /// 
        /// Gets the web socket listeners.
        /// 
        /// The web socket listeners.
        IEnumerable WebSocketListeners { get; }
        /// 
        /// Occurs when [logger loaded].
        /// 
        event EventHandler LoggerLoaded;
        /// 
        /// Occurs when [reload completed].
        /// 
        event EventHandler ReloadCompleted;
        /// 
        /// Occurs when [configuration updated].
        /// 
        event EventHandler ConfigurationUpdated;
        /// 
        /// Notifies the pending restart.
        /// 
        void NotifyPendingRestart();
        /// 
        /// Gets the XML configuration.
        /// 
        /// The type.
        /// The path.
        /// System.Object.
        object GetXmlConfiguration(Type type, string path);
    }
}