#ifndef Datenbank_H
#define Datenbank_H

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

using namespace Framework;
using namespace sql;

namespace Admin_Recht
{
	const int CSStarten = 24;
	const int CSBeenden = 25;
	const int CSPausieren = 26;
	const int CSMCChange = 27;
}

class CSDatenbank
{
private:
	Datenbank *datenbank;
	Critical cs;
	int ref;

public:
	// Konstruktor
	CSDatenbank( InitDatei *zIni );
	// Destruktor
	~CSDatenbank();
	// nicht constant
	void lock();
	void unlock();
	int istAdministrator( const char *name, const char *passwort );
	bool adminHatRecht( int id, 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 );
	int getKlientAccountId( int klientId );
	int getAccountFreunde( int accountId, Array< int > *fAccountId );
	int getAccountOnlineFreunde( int accountId, Array< int > *fAccountId );
	bool accountNameChange( int accountId, const char *name );
	bool beendeFreundschaft( int accountId1, int accountId2 );
	bool proveFreundschaftsAnfrage( int vonAccountId, int zuAccountId );
	bool saveFreundschaftsAnfrage( int vonAccountId, int zuAccountId );
	int getFreundschaftsAnfragen( int accountId, Array< int > *vonAccountIds );
	bool neueFreundschaft( int accountId1, int accountId2 );
	Text *getAccountRufName( int accountId );
	bool accountIstOnline( int accountId );
	bool accountIstImSpiel( int accountId );
	int getChatServerId( int accountId );
	bool getChatServerIpPort( int serverId, unsigned short *port, char **ip );
	int getChatNachrichten( int accountId, Array< int > *vonAccount, RCArray< Text > *nachricht );
	bool speicherChatNachricht( int vonAccount, int zuAccount, const char *nachricht );
	int getChatroomAccount( int chatroomId, Array< int > *accountId );
	int chatroomErstellen( int accountId, const char *name );
	bool proveChatroomEinladung( int vonAccount, int zuAccount, int chatroomId );
	bool chatroomBeitreten( int accountId, int chatroomId );
	int chatroomVerlassen( int accountId, int chatroomId );
	int getChatroomAdmin( int chatroomId );
	// constant
	Text *getLetzterFehler() const;
	// Reference Counting
	CSDatenbank *getThis();
	CSDatenbank *release();
};

#endif