#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 ShSStarten = 37;
	const int ShSBeenden = 38;
	const int ShSPausieren = 39;
    const int ShSMKChange = 40;
}

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

public:
	// Konstruktor
	ShSDatenbank( InitDatei *zIni );
	// Destruktor
	~ShSDatenbank();
	// 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 );
	bool getSpielArtListe( int cId, char *suche, Array< int > *ret );
	int getSpielBesitzStatus( int cId, int sId );
	int getSpielTestversionStatus( int cId, int sId );
	int getSpielErwerbbarStatus( int cId, int sId );
	int getSpielPreis( int sId, bool testVersion );
	bool spielKaufen( int cId, int sId, bool testVersion );
	bool getKarteListe( int cId, int sId, char *suche, Array< int > *ret );
	int getKarteBesitzStatus( int cId, int kId );
	int getKarteTestversionStatus( int cId, int kId );
	int getKarteErwerbbarStatus( int cId, int kId );
	int getKartePreis( int kId, bool testVersion );
    bool karteKaufen( int cId, int kId, bool testVersion );
    int getUpdateKarte( int serverId );
    bool endUpdateKarte( int karteId );
    bool getEditorServerPortIp( int karteId, int *port, Text *ip );
    bool proveKarte( int serverId, int karteId );
    bool getKarteShopServerPortIp( int karteId, int clientId, int *port, Text *ip );
    bool proveSpiel( int serverId, int spielId );
    bool getSpielShopServerPortIp( int spielId, int clientId, int *port, Text *ip );
	// constant
	Text *getLetzterFehler() const;
	// Reference Counting
	ShSDatenbank *getThis();
	ShSDatenbank *release();
};

#endif