#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
