using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Drawing;
using MediaBrowser.Controller.Localization;
using MediaBrowser.Controller.MediaInfo;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Controller.Weather;
using System.Collections.Generic;
namespace MediaBrowser.Controller
{
    /// 
    /// Class Kernel
    /// 
    public class Kernel 
    {
        /// 
        /// Gets the instance.
        /// 
        /// The instance.
        public static Kernel Instance { get; private set; }
        /// 
        /// Gets the image manager.
        /// 
        /// The image manager.
        public ImageManager ImageManager { get; set; }
        /// 
        /// Gets the FFMPEG controller.
        /// 
        /// The FFMPEG controller.
        public FFMpegManager FFMpegManager { get; set; }
        /// 
        /// Gets the name of the web application that can be used for url building.
        /// All api urls will be of the form {protocol}://{host}:{port}/{appname}/...
        /// 
        /// The name of the web application.
        public string WebApplicationName
        {
            get { return "mediabrowser"; }
        }
        /// 
        /// Gets the HTTP server URL prefix.
        /// 
        /// The HTTP server URL prefix.
        public virtual string HttpServerUrlPrefix
        {
            get
            {
                return "http://+:" + _configurationManager.Configuration.HttpServerPortNumber + "/" + WebApplicationName + "/";
            }
        }
        /// 
        /// Gets the list of Localized string files
        /// 
        /// The string files.
        public IEnumerable StringFiles { get; set; }
        /// 
        /// Gets the list of currently registered weather prvoiders
        /// 
        /// The weather providers.
        public IEnumerable WeatherProviders { get; set; }
        /// 
        /// Gets the list of currently registered image processors
        /// Image processors are specialized metadata providers that run after the normal ones
        /// 
        /// The image enhancers.
        public IEnumerable ImageEnhancers { get; set; }
        private readonly IServerConfigurationManager _configurationManager;
        /// 
        /// Creates a kernel based on a Data path, which is akin to our current programdata path
        /// 
        /// The configuration manager.
        public Kernel(IServerConfigurationManager configurationManager)
        {
            Instance = this;
            _configurationManager = configurationManager;
        }
    }
}