using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;

namespace KaoriStudio.Core.IO.FileSystem
{
	/// <summary>
	/// A virtual directory
	/// </summary>
	public interface IDirectoryInfo : IFileSystemInfo
	{
		/// <summary>
		/// Gets a directory within this directory
		/// </summary>
		/// <param name="name">The subdirectory name</param>
		/// <returns>The subdirectory</returns>
		IDirectoryInfo GetDirectory(string name);

		/// <summary>
		/// Gets a file within this directory
		/// </summary>
		/// <param name="name">The file name</param>
		/// <returns>The file</returns>
		IFileInfo GetFile(string name);
		
		/// <summary>
		/// Returns an enumerable collection of file system information in the current directory
		/// </summary>
		/// <returns>An enumerable collection of file system information in the current directory.</returns>
		IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos();

		/// <summary>
		/// Returns an enumerable collection of file information in the current directory.
		/// </summary>
		/// <returns>An enumerable collection of the files in the current directory.</returns>
		IEnumerable<IFileInfo> EnumerateFiles();

		/// <summary>
		/// Returns an enumerable collection of directory information in the current directory.
		/// </summary>
		/// <returns>An enumerable collection of the directories in the current directory.</returns>
		IEnumerable<IDirectoryInfo> EnumerateDirectories();
	}
}
