/*****************************************************************************
 *	DirectoryInfo.h 														 *
 *																			 *
 *	XFX System::IO::DirectoryInfo class definition file.					 *
 *	Copyright (c) XFX Team. All Rights Reserved.							 *
 *****************************************************************************/
#ifndef _SYSTEM_IO_DIRECTORYINFO_
#define _SYSTEM_IO_DIRECTORYINFO_

#include <System/Types.h>
#include "FileSystemInfo.h"

namespace System
{
	namespace IO
	{
		class Directory;

		/**
		 * Exposes instance methods for creating, moving, and enumerating through directories and subdirectories. This class cannot be inherited.
		 */
		class DirectoryInfo : public FileSystemInfo
		{
		private:
			friend class Directory;

			String current;
			String parent;

		public:
			bool Exists() const;
			String getName() const;
			DirectoryInfo* getParent() const;
			DirectoryInfo* getRoot() const;

			DirectoryInfo();
			DirectoryInfo(const String& path); // Initializes a new instance of the System::IO::DirectoryInfo class on the specified path.

			/**
			 * Creates a directory.
			 */
			void Create();
			/**
			 * Creates a subdirectory or subdirectories on the specified path.
			 * The specified path can be relative to this instance of the System::IO::DirectoryInfo class.
			 */
			DirectoryInfo CreateSubDirectory(const String& path);
			/**
			 * Deletes this System::IO::DirectoryInfo if it is empty.
			 */
			void Delete();
			/**
			 * Deletes this instance of a System::IO::DirectoryInfo, specifying whether to delete subdirectories and files.
			 */
			void Delete(const bool recursive);
			DirectoryInfo* GetDirectories(); // 
			DirectoryInfo* GetDirectories(const String& searchPattern);
			FileSystemInfo* GetFileSystemInfos();
			FileSystemInfo* GetFileSystemInfos(const String& searchPattern);
			static const Type& GetType();
			void MoveTo(const String& destDirName);
			const String ToString() const;

			bool operator !=(const DirectoryInfo& right) const;
			bool operator ==(const DirectoryInfo& right) const;
		};
	}
}

#endif //_SYSTEM_IO_DIRECTORYINFO_