#ifndef Datenbank_H
#define Datenbank_H

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

using namespace Framework;
using namespace sql;

namespace Admin_Recht
{
	const int RSStarten = 8;
	const int RSBeenden = 9;
	const int RSPausieren = 10;
	const int RSMCChange = 11;
}

class RSDatenbank : public virtual ReferenceCounter
{
private:
	Datenbank* datenbank;
	CRITICAL_SECTION cs;

public:
	// Konstruktor
	RSDatenbank(InitDatei* zIni);
	// Destruktor
	~RSDatenbank();
	// 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 proveNeuAccount(const char* name, const char* eMail);
	bool neuAccount(const char* name, const char* pass, const char* geheim, const char* eMail, const char* gebDatum, InitDatei* zIni);
	int removeAccount(const char* name, const char* pass, const char* geheim, InitDatei* zIni);
	void removeAccountAbbruch(const char* name);
	bool removeConfirmation(const char* name, const char* key);
	int passwortChange(const char* name, const char* pass, const char* nPass, const char* geheim);
	int eMailChange(const char* name, const char* pass, const char* geheim, const char* eMail);
	int geheimnisChange(const char* name, const char* pass, const char* geheim, const char* nGeheim);
	bool nameVergessen(const char* pass, const char* geheim, InitDatei* zIni);
	bool passwortVergessen(const char* name, const char* geheim, InitDatei* zIni);
	bool geheimnisVergessen(const char* name, const char* pass, InitDatei* zIni);
	Text* eMailVergessen(const char* name, const char* pass, const char* geheim);
	char suchConfirmation(const char* name, const char* pass);
	void sendeRemoveEMail(const char* name, InitDatei* zIni);
	// constant
	Text* getLetzterFehler() const;
};

#endif