#ifndef Datenbank_H
#define Datenbank_H

#include <sql.h>
#include <Text.h>
#include <Array.h>
#include <InitDatei.h>

using namespace Framework;
using namespace sql;

// Administratoren 
namespace Admin_Recht
{
	const int LSStarten = 16;
	const int LSBeenden = 17;
	const int LSPausieren = 18;
	const int LSMCChange = 19;
}

class ESDatenbank
{
private:
	Datenbank *datenbank;
	CRITICAL_SECTION cs;
	int ref;

public:
	// Konstruktor
	ESDatenbank( InitDatei *zIni );
	// Destruktor
	~ESDatenbank();
	// nicht constant
	void lock();
	void unlock();
	int istAdministrator( const char *name, const char *passwort );
	bool adminHatRecht( int admin, int recht );
	bool proveKlient( int num, int sNum );
	Text *getKlientKey( int cId );
	void unregisterKlient( int num, int sNum );
	bool setServerStatus( int id, int status );
	bool setMaxClients( int id, int maxC );
	bool serverIstNichtPausiert( int id );
	bool getPatchServer( int client, Text *ip, int *port );
	bool getRegisterServer( int client, Text *ip, int *port );
	bool getLoginServer( int client, Text *ip, int *port );
	bool getInformationServer( int client, Text *ip, int *port );
	bool getChatServer( int client, Text *ip, int *port );
	bool getAnmeldungServer( int client, Text *ip, int *port );
	bool getSpielServer( int client, Text *ip, int *port );
	bool getShopServer( int client, Text *ip, int *port );
    bool getNewsServer( int client, Text *ip, int *port );
    bool getHistorieServer( int client, Text *ip, int *port );
    bool getKartenServer( int client, Text *ip, int *port );
    bool getEditorServer( int client, Text *ip, int *port );
    bool getMinigameServer( int client, Text *ip, int *port );
	void removeKlient( int klientId );
	int clientIstEingeloggt( int clientId );
	int logoutKlient( int klientId, Array< int > *ret );
	int getSpielerAusGruppe( int gruppeId, Array< int > *accountId );
	int kickSpielerAusGruppe( int gruppeId, int accountId );
	int getGruppeAdmin( int gruppeId );
	int getSpielerAusChatroom( int chatroomId, Array< int > *accountId );
	int getChatroomAdmin( int chatroomId );
	// constant
	Text *getLetzterFehler() const;
	// Reference Counting
	ESDatenbank *getThis();
	ESDatenbank *release();
};

#endif