#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 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 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
