#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 LSStarten = 12;
    const int LSBeenden = 13;
    const int LSPausieren = 14;
    const int LSMCChange = 15;
}

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

public:
    // Konstruktor
    LSDatenbank( InitDatei *zIni );
    // Destruktor
    ~LSDatenbank();
    // 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 getAccountId( char *name, char *pass );
    int loginKlient( int klientId, int accountId );
    bool accountGeheim( int accountId, char *geheim );
    int *kickKlient( int accountId );
    void accountOnline( int accountId, char *ip, unsigned char *locIp, char *pcName );
    int logoutKlient( int klientId, Array< int > *ret );
    Text **getChatServerIpPort( int id );
    bool getSpielServerPortIp( int spielErstelltId, unsigned short *port, Text *ip );
    int getSpielerAusGruppe( int gruppeId, Array< int > *accountId );
    int kickSpielerAusGruppe( int gruppeId, int accountId );
    bool getChatServerPortIp( int accountId, unsigned short *port, Text *ip );
    int getGruppeAdmin( int gruppeId );
    int getSpielerAusChatroom( int chatroomId, Array< int > *accountId );
    int getChatroomAdmin( int chatroomId );
    // constant
    Text *getLetzterFehler() const;
};

#endif