using System;
using System.IO;
namespace MediaBrowser.Common.IO
{
    /// 
    /// Interface IFileSystem
    /// 
    public interface IFileSystem
    {
        /// 
        /// Determines whether the specified filename is shortcut.
        /// 
        /// The filename.
        /// true if the specified filename is shortcut; otherwise, false.
        bool IsShortcut(string filename);
        /// 
        /// Resolves the shortcut.
        /// 
        /// The filename.
        /// System.String.
        string ResolveShortcut(string filename);
        /// 
        /// Creates the shortcut.
        /// 
        /// The shortcut path.
        /// The target.
        void CreateShortcut(string shortcutPath, string target);
        /// 
        /// Gets the file system info.
        /// 
        /// The path.
        /// FileSystemInfo.
        FileSystemInfo GetFileSystemInfo(string path);
        /// 
        /// Gets the valid filename.
        /// 
        /// The filename.
        /// System.String.
        string GetValidFilename(string filename);
        /// 
        /// Gets the creation time UTC.
        /// 
        /// The info.
        /// DateTime.
        DateTime GetCreationTimeUtc(FileSystemInfo info);
        /// 
        /// Gets the last write time UTC.
        /// 
        /// The information.
        /// DateTime.
        DateTime GetLastWriteTimeUtc(FileSystemInfo info);
        /// 
        /// Gets the last write time UTC.
        /// 
        /// The path.
        /// DateTime.
        DateTime GetLastWriteTimeUtc(string path);
        /// 
        /// Gets the file stream.
        /// 
        /// The path.
        /// The mode.
        /// The access.
        /// The share.
        /// if set to true [is asynchronous].
        /// FileStream.
        FileStream GetFileStream(string path, FileMode mode, FileAccess access, FileShare share, bool isAsync = false);
        /// 
        /// Swaps the files.
        /// 
        /// The file1.
        /// The file2.
        void SwapFiles(string file1, string file2);
        /// 
        /// Determines whether [contains sub path] [the specified parent path].
        /// 
        /// The parent path.
        /// The path.
        /// true if [contains sub path] [the specified parent path]; otherwise, false.
        bool ContainsSubPath(string parentPath, string path);
        /// 
        /// Determines whether [is root path] [the specified path].
        /// 
        /// The path.
        /// true if [is root path] [the specified path]; otherwise, false.
        bool IsRootPath(string path);
        /// 
        /// Normalizes the path.
        /// 
        /// The path.
        /// System.String.
        string NormalizePath(string path);
        /// 
        /// Substitutes the path.
        /// 
        /// The path.
        /// From.
        /// To.
        /// System.String.
        string SubstitutePath(string path, string from, string to);
        /// 
        /// Gets the file name without extension.
        /// 
        /// The information.
        /// System.String.
        string GetFileNameWithoutExtension(FileSystemInfo info);
        /// 
        /// Gets the file name without extension.
        /// 
        /// The path.
        /// System.String.
        string GetFileNameWithoutExtension(string path);
    }
}