namespace Voile.VFS;

/// <summary>
/// A virtual mounting point.
/// </summary>
public interface IVirtualMountPoint
{
    /// <summary>
    /// Order of mounting for this mount point. Lower values indicate higher priority for lookup.
    /// </summary>
    int Order { get; }
    /// <summary>
    /// Mounts this <see cref="IVirtualMountPoint"/>.
    /// </summary>
    void Mount();
    /// <summary>
    /// Gets a file.
    /// </summary>
    /// <param name="path">Relative path to the file.</param>
    /// <returns>An instance of <see cref="VirtualFile"/> if the file exists; otherwise, an exception is thrown.</returns>
    VirtualFile GetFile(string path);
    /// <summary>
    /// Gets all files available at this <see cref="IVirtualMountPoint"/>.
    /// </summary>
    /// <returns>A dictionary mapping a relative path to an instance of a <see cref="VirtualFile"/>.</returns>
    IDictionary<string, VirtualFile> GetFiles();
    /// <summary>
    /// Determines whether a file exists at the given relative path within this mount point.
    /// </summary>
    /// <param name="path">The relative path of the file to check.</param>
    /// <returns><c>true</c> if the file exists; otherwise, <c>false</c>.</returns>
    bool HasFile(string path);
}