#ifndef Datenbank_H
#define Datenbank_H

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

using namespace Framework;
using namespace sql;

namespace Admin_Recht
{
	const int EdSStarten = 49;
	const int EdSBeenden = 50;
	const int EdSPausieren = 51;
	const int EdSMKChange = 52;
}

struct AHDaten;

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

public:
	// Konstruktor
	EdSDatenbank( InitDatei *zIni );
	// Destruktor
	~EdSDatenbank();
	// 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 setMaxKarten( int id, int maxK );
	bool serverIstNichtPausiert( int id );
	Text *getKarteName( int id );
	bool proveKarte( int id, int cId, int sNum );
    bool istKarteInUpdate( int id );
    bool startKarteUpdate( int id );
    bool startShopUpdate( int id );
    bool getKarteShopDaten( int karte, int &es, int &tp, int &vp );
    bool setKarteShopDaten( int karte, int es, int tp, int vp );
    bool setMaxSpieler( int karte, int spieler );
    bool karteErstellen( const char *name, int spielArt, int klient );
    int getSpielArtId( int karte );
    bool getLast30DaysIncomeStatistik( int karte, Array< int > *einkommen, Array< int > *verkauft );
    bool getLast30DaysSpielStatistik( int karte, Array< int > *spiele );
    int getKaufAnz( int karte );
	// constant
	Text *getLetzterFehler() const;
	// Reference Counting
	EdSDatenbank *getThis();
	EdSDatenbank *release();
};

#endif