#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);
        
    private:    
        int processConfCommand(Nlsr& pnlsr, string command);
        int processConfCommandNetwork(Nlsr& pnlsr, string command);
        int processConfCommandSiteName(Nlsr& pnlsr, string command);
        int processConfCommandRootKeyPrefix(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 processConfCommandCertDir(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
