#ifndef __Directory_h__
#define __Directory_h__

#include "DirectoryEntry.h"
#include "Log.h"
#include "includes"

namespace coreutils
{

   class Directory
   {

   public:
      Directory(std::string path)
      {
         dir = opendir(path.c_str());
         if (dir)
         {
            struct dirent *entry = readdir(dir);
            while (entry)
            {
               directory.emplace(std::string(entry->d_name), entry);
               entry = readdir(dir);
            }
         }
         if (directory.size() > 0)
            cursor = directory.begin();
      }

      ~Directory() {}

      bool eod()
      {
         return cursor == directory.end();
      }

      DirectoryEntry get()
      {
         if (eod())
            return NULL;
         return cursor->second;
      }

      void next()
      {
         ++cursor;
      }

   private:
      DIR *dir;
      std::map<std::string, DirectoryEntry> directory;
      std::map<std::string, DirectoryEntry>::iterator cursor;
   };

}

#endif