#ifndef Spiele_H
#define Spiele_H

#include <Klient.h>
#include <Fenster.h>
#include <Knopf.h>
#include "Spiel Auswahl/SpielAuswahl.h"
#include "Karte Auswahl/KarteAuswahl.h"
#include "Angemeldet/Angemeldet.h"
#include "Gruppe/Gruppe.h"
#include "Team Auswahl/TeamAuswahl.h"
#include "Statistik/SpielStatistik.h"

using namespace Framework;

namespace SpieleAnimation
{
	const int einfahren = 1;
	const int ausblenden = 2;
}

class Spiele : public Zeichnung
{
private:
	int animation;
	Punkt begPos;
	Punkt begGröße;
	Punkt pos1;
	Punkt größe1;
	Punkt pos2;
	Punkt größe2;
	Punkt pos3;
	Punkt größe3;
	Punkt pos4;
	Punkt größe4;
	Punkt bildschirmGröße;
	LRahmen *rahmen;
	SpielAuswahlFenster *spielAuswahl;
	KarteAuswahlFenster *karteAuswahl;
	AngemeldetFenster *anmeldung;
	GruppeFenster *gruppe;
	TeamAuswahl *teamAuswahl;
	SpielStatistik *statistik;
	Knopf *oben;
	Knopf *links;
	Knopf *unten;
	Knopf *rechts;
	int alpha;
	int ladenJetzt;
	int ladenAlpha;
	bool sichtbar;
	int jetzt;
	int prozent1;
	int prozent2;
	int prozent3;
	int prozent4;
	int prozent5;
	int prozent6;
	double tickVal;
	double tickVal2;
	bool spielGefundenB;
	int ref;

public:
	// Konstruktor
	Spiele( Schrift *zSchrift, Fenster *zNachLoginFenster, int x );
	// Destruktor
	~Spiele();
	// nicht constant
	void setSichtbar( bool sicht );
	void updateErlaubt();
	void anmelden( int karteId );
	void anmeldungAbbrechen();
	void gruppeBetreten( int gruppeId );
	void gruppeVerlassen();
	void spielerBetrittGruppe( int gruppeId, int accountId );
	void spielerVerlässtGruppe( int gruppeId, int accountId );
	void gruppeNachricht( int gruppeId, char *nachricht );
	void gruppeAnmelden( int gruppeId );
	void gruppeAbmelden( int gruppeId );
	void setGruppeSpielStarten( int gruppeId, bool spielStarten );
	void setGruppeAdmin( int gruppeId, int admin );
	void kickAusGruppe( int gruppeId );
	void gruppeEinladungNeu( int gruppeId, int accountId );
	void gruppeEinadungAbgelehnt( int gruppeId, int accountId );
	void gruppeEinladungAbgebrochen( int gruppeId, int accountId );
	void spielGefunden( int karteId );
	void spielGefundenZeitVerbleibend( int sekunden );
	void spielGefundenAbbruch();
	void zurückInWarteschlange( int stunden, int minuten, int sekunden );
	void teamAuswahlBetreten();
	void teamAuswahlInit( SpielerTeamStruktur *sts );
	void teamAuswahlAddSpieler( int accountId );
	void teamAuswahlRemoveSpieler( int accountId );
	void teamAuswahlSpielerWehseltTeam( int accountId, int spielerNummer );
	void teamAuswahlChatNachricht( char *nachricht );
	void teamAuswahlAbbrechen();
	void statistikNachricht( int län, char *bytes );
	void ladeSpielStatistik( int karteId );
	bool tick( double tickVal ) override;
	void doMausEreignis( MausEreignis &me ) override;
	void doTastaturEreignis( TastaturEreignis &te ) override;
	void render( Bild &zRObj ) override;
	// constant
	bool istAnimiert() const;
	bool istSichtbar() const;
	int getKarteId() const;
	int getGruppeId() const;
	SpielerTeamStruktur *getSTS() const;
	// Reference Counting
	Spiele *getThis();
	Spiele *release();
};

#endif