#ifndef Spiel_H
#define Spiel_H

#include "SpielKlasse.h"
#include <Datei.h>
#include "Strukturen.h"
#include "Spieler.h"
#include "Karte.h"
#include "Bestenliste.h"

class Statistik;
class StatistikV;

class Spiel : public SpielKlasse
{
private:
	Statistik *stat;
	Bestenliste *score;
	Array< int > *teams;
	int teamAnzahl;
	RCArray< Spieler > *spieler;
	SSDatenbankV *psqldb;
	int spielId;
	int karteId;
	int spielerAnzahl;
	Karte *karte;
	CRITICAL_SECTION cs;
	SpielerTeamStruktur *sts;
	Datei *log;
	bool isRunning;
	int rundenAnzahl;
	double spielZeit;
	bool ende;
    Text mapPfad;
	int ref;

public:
	// Konstruktor
	Spiel();
	// Destruktor
	~Spiel();
	// nicht constant
	virtual void setPSQLK( SSDatenbankV *psqldb );
	virtual void setSpielId( int id );
    virtual void setKarteId( int karteId );
    virtual void setTempPfad( char *pfad );
	virtual void setAccounts( int anzahl, Array< int > *zAccounts );
	virtual void setKlients( int anzahl, RCArray< SSKlientV > *zKlients );
	virtual void setSpielerNummern( int anzahl, Array< int > *spielerNummern );
	virtual void klientOffline( int accountId );
	virtual void klientOnline( int accountId, SSKlientV *zKlient );
	virtual void nachricht( int accountId, int len, char *bytes );
	void tick( double zeit );
	virtual void run();
	// constant
	virtual StatistikV *getStatistik() const;
	// Reference Counting 
	virtual SpielKlasse *getThis();
	virtual SpielKlasse *release();
};

#endif