#ifndef CONF_PROCESSOR_HPP
#define CONF_PROCESSOR_HPP

#include "nlsr.hpp" 

namespace nlsr {

using namespace std;

class ConfFileProcessor{
	public:
		ConfFileProcessor()
			:confFileName()
		{
		}
		ConfFileProcessor(const string& cfile){ 
			confFileName=cfile;
		}

		int processConfFile(Nlsr& pnlsr);
		int processConfCommand(Nlsr& pnlsr, string command);
		int processConfCommandNetwork(Nlsr& pnlsr, string command);
		int processConfCommandSiteName(Nlsr& pnlsr, string command);
		int processConfCommandRouterName(Nlsr& pnlsr, string command);
		int processConfCommandInterestRetryNumber(Nlsr& pnlsr, string command);
		int processConfCommandInterestResendTime(Nlsr& pnlsr, string command);
		int processConfCommandLsaRefreshTime(Nlsr& pnlsr, string command);
		int processConfCommandMaxFacesPerPrefix(Nlsr& pnlsr, string command);
		int processConfCommandTunnelType(Nlsr& pnlsr, string command);

		int processConfCommandChronosyncSyncPrefix(Nlsr& pnlsr, string command);
		int processConfCommandLogDir(Nlsr& pnlsr, string command);
		int processConfCommandDebugging(Nlsr& pnlsr, string command);
		int processConfCommandDetailedLogging(Nlsr& pnlsr, string command);
		int processConfCommandIsHyperbolicCalc(Nlsr& pnlsr, string command);

		int processConfCommandHyperbolicCordinate(Nlsr& pnlsr, string command);

		int processConfCommandNdnNeighbor(Nlsr& pnlsr, string command);
		int processConfCommandNdnName(Nlsr& pnlsr, string command);
		int processConfCommandLinkCost(Nlsr& pnlsr, string command);
		

	private:
		string confFileName;
};

} //namespace nlsr
#endif
