#include "CommandList.h"
#include "Log.h"

namespace core {

   CommandList::CommandList(std::string delimiter, int depth) : delimiter(delimiter), depth(depth) {}

   void CommandList::add(Command &command, std::string name) {
      commands.insert(std::make_pair(name, &command));
   }

   void CommandList::remove(Command &command) {}

   int CommandList::processRequest(coreutils::ZString &request, TCPSession &session) {
      if(session.grab != NULL) {
     	  return session.grab->processCommand(request, session);
      }
      else {
         if(request.equals(""))
           return 0;
         request.split(delimiter, depth);
         request.reset();
         try {
            auto command = commands.at(request[0].str());
	    return command->processCommand(request, session);
         }
         catch(...) {
            return 0;
         }
      }
      return true;
   }

   bool CommandList::grabInput(TCPSession &session, Command &command) {
      session.grab = &command;
      return true;
   }

   void CommandList::clearGrab(TCPSession &session) {
      session.grab = NULL;
   }

   int CommandList::processCommand(coreutils::ZString &request, TCPSession &session) {
      //      for(Command *command : commands)
      //	     session.out << command->getName() << std::endl;
      return true;
   }

}
