namespace MediaBrowser.Common.Configuration
{
    /// 
    /// Interface IApplicationPaths.
    /// 
    public interface IApplicationPaths
    {
        /// 
        /// Gets the path to the program data folder.
        /// 
        /// The program data path.
        string ProgramDataPath { get; }
        /// 
        /// Gets the path to the web UI resources folder.
        /// 
        /// 
        /// This value is not relevant if the server is configured to not host any static web content.
        /// 
        string WebPath { get; }
        /// 
        /// Gets the path to the program system folder.
        /// 
        /// The program data path.
        string ProgramSystemPath { get; }
        /// 
        /// Gets the folder path to the data directory.
        /// 
        /// The data directory.
        string DataPath { get; }
        /// 
        /// Gets the image cache path.
        /// 
        /// The image cache path.
        string ImageCachePath { get; }
        /// 
        /// Gets the path to the plugin directory.
        /// 
        /// The plugins path.
        string PluginsPath { get; }
        /// 
        /// Gets the path to the plugin configurations directory.
        /// 
        /// The plugin configurations path.
        string PluginConfigurationsPath { get; }
        /// 
        /// Gets the path to the log directory.
        /// 
        /// The log directory path.
        string LogDirectoryPath { get; }
        /// 
        /// Gets the path to the application configuration root directory.
        /// 
        /// The configuration directory path.
        string ConfigurationDirectoryPath { get; }
        /// 
        /// Gets the path to the system configuration file.
        /// 
        /// The system configuration file path.
        string SystemConfigurationFilePath { get; }
        /// 
        /// Gets the folder path to the cache directory.
        /// 
        /// The cache directory.
        string CachePath { get; }
        /// 
        /// Gets the folder path to the temp directory within the cache folder.
        /// 
        /// The temp directory.
        string TempDirectory { get; }
        /// 
        /// Gets the magic string used for virtual path manipulation.
        /// 
        /// The magic string used for virtual path manipulation.
        string VirtualDataPath { get; }
        /// 
        /// Gets the path used for storing trickplay files.
        /// 
        /// The trickplay path.
        string TrickplayPath { get; }
        /// 
        /// Gets the path used for storing backup archives.
        /// 
        /// The backup path.
        string BackupPath { get; }
        /// 
        /// Checks and creates all known base paths.
        /// 
        void MakeSanityCheckOrThrow();
        /// 
        /// Checks and creates the given path and adds it with a marker file if non existant.
        /// 
        /// The path to check.
        /// The common marker file name.
        /// Check for other settings paths recursivly.
        void CreateAndCheckMarker(string path, string markerName, bool recursive = false);
    }
}