#ifndef __MonitorConfiguration_H
#define __MonitorConfiguration_H 0

#ifndef WIN32
	#define TCHAR char
#endif

#include <string>
#include "MonitorModules.h"
#include "xmltools.h"

enum MonitorChannel {links=0,rechts=1} ;

struct LoginAccount
{
	std::string Loginname ;
	std::string Password ;
} ;

class SNDConfiguration
{
public:
	int iAktiv ;
	std::string sDevice ;
	int iChannel ;
	int iFMS[2] ;
	int iZVEI[2] ;
	int iPOC512[2] ;
	int iPOC1200[2] ;

	// Namen der Kanaele (hier geht komischerweise kein std::string mit dem gcc 4.0.3
	char sChannelName0[255] ;
	char sChannelName1[255] ;

	XMLNode configSoundcard ;
	XMLNode configChannel[2];
	// Parameter der Module
	XMLNode configFMS[2],
			configZVEI[2],
			configPOC512[2],
			configPOC1200[2] ;

} ;

class MonitorConfiguration
{
public:
	MonitorConfiguration() ;
	virtual ~MonitorConfiguration() ;

	SNDConfiguration m_sndConfig[4] ;
	std::string m_sMonitordName ;
	std::string m_sLogfile ;
	std::string m_sLoglevel ;
	std::string m_sLogConfigurationFile ;
	bool ReadConfiguration(std::string filename) ;
	bool ResetConfiguration() ;
	bool IsValidLogin(std::string loginname, std::string password, std::string host="") ;

	//MonitorModuleArray m_ModulesLinks[4] ;
	//MonitorModuleArray m_ModulesRechts[4] ;
	unsigned int m_Port ;
	unsigned int m_PortFMS32Pro ;
	unsigned int m_PortCrusader ;
	XMLNode m_configDataPlugins ;

	std::string m_BindIP ;
	bool m_Daemonize ;
#ifdef WIN32
	bool m_service_install;
	bool m_service_run;
	bool m_service_uninstall;
#endif
	std::string m_ConfigFile ;
	std::string m_crusaderUsername ;
	std::string m_socketFilterFileName ;
	std::string m_pluginFilterFileName ;
	
	bool ParseCommandline (int argc, TCHAR * argv[]) ;
/*	int getNodeInt(XMLNode parent,std::string childName,int defaultValue) ;
	std::string getNodeText(XMLNode parent,std::string childName,std::string defaultValue) ;
*/

protected:
	std::string ReadChannel(XMLNode channelNode, int sndCard, int channelNum) ;
	void ReadSoundCard(XMLNode sndNode, int sndCard);
	void ReadTCPConfiguration(XMLNode tcpNode) ;

	void ReadAuthenticationData(XMLNode authNode) ;
	void ReadMySQLConfiguration(XMLNode dbNode, int moduleNum=0);
	std::vector<struct LoginAccount> m_MasterLogins ;
	std::vector<std::string> m_IPBlacklist ;
	std::vector<std::string> m_IPWhitelist ;
	std::vector<std::string> m_IPLoginlist ;

};

#endif
