#ifndef TeamAuswahl_H
#define TeamAuswahl_H

#include "..\..\..\Strukturen\Strukturen.h"
#include <MausEreignis.h>
#include <TastaturEreignis.h>
#include <Bild.h>
#include <TextFeld.h>
#include <Knopf.h>
#include <Tabelle.h>
#include <AuswahlBox.h>

using namespace Framework;

class TeamAuswahlListeSpieler
{
private:
	int accountId;
	TextFeld *name;
	AuswahlBox *teamAuswahl;
	TextFeld *team;
	TextFeld *punkte;
	TextFeld *spiele;
	TextFeld *gewonnen;
	TextFeld *farbe;
	int spielerFarbe;
	LRahmen *rahmen;
	Text *teamName;
	SpielerTeamStruktur *sts;
	bool rend;
	int ref;

public:
	// Konstruktor
	TeamAuswahlListeSpieler( SpielerTeamStruktur *sts, Schrift *zSchrift, int accountId, int karteId );
	// Destruktor
	~TeamAuswahlListeSpieler();
	// nicht constant
	void disable();
	void spielerTeamAuswahlE( AuswahlBox *obj, int p1, int p2 );
	void setFarbe( int farbe );
	void setTeam( Text *zName );
	void setTeamErlaubt( Text *zName, bool erlaubt, int teamFarbe );
	bool tick( double tickVal );
	void doMausEreignis( MausEreignis &me );
	void render( int yOff, Bild &zRObj );
	// constant
	int getAccountId() const;
	// Reference Counting
	TeamAuswahlListeSpieler *getThis();
	TeamAuswahlListeSpieler *release();
};

class TeamAuswahlListeTeam
{
private:
	int maxSpieler;
	int jetztSpieler;
	int team;
	TextFeld *name;
	TextFeld *mjSpieler;
	TextFeld *farbe;
	int teamFarbe;
	RCArray< TeamAuswahlListeSpieler > *spieler;
	LRahmen *rahmen;
	AlphaFeld *titelAf;
	Text *teamName;
	double tickVal;
	int höhe;
	bool rend;
	int ref;

public:
	// Konstruktor
	TeamAuswahlListeTeam( Schrift *zSchrift );
	// Destruktor
	~TeamAuswahlListeTeam();
	// nicht constant
	void disable();
	void setMaxSpieler( int maxSpieler );
	void setName( Text *name );
	void setFarbe( int farbe );
	void setTeam( int team );
	void addSpieler( TeamAuswahlListeSpieler *spieler );
	void removeSpieler( int accountId );
	void setTeamErlaubt( Text *zName, bool erlaubt, int teamFarbe );
	bool tick( double tickVal );
	void doMausEreignis( MausEreignis &me );
	void render( int yOff, Bild &zRObj );
	// constant
	int getTeamNummer() const;
	int getHöhe() const;
	bool istPlatzFrei() const;
	int getMaxSpieler() const;
	Text *zName() const;
	TeamAuswahlListeSpieler *getSpielerDaten( int accountId ) const;
	TeamAuswahlListeSpieler *zSpielerDaten( int accountId ) const;
	// Reference Counting
	TeamAuswahlListeTeam *getThis();
	TeamAuswahlListeTeam *release();
};

class TeamAuswahlListe
{
private:
	LRahmen *rahmen;
	VScrollBar *scroll;
	RCArray< TeamAuswahlListeTeam > *teams;
	Schrift *schrift;
	SpielerTeamStruktur *sts;
	int teamAnzahl;
	int karteId;
	bool rend;
	int ref;

public:
	// Konstruktor
	TeamAuswahlListe( Schrift *zSchrift, SpielerTeamStruktur *sts, int karteId );
	// Destruktor
	~TeamAuswahlListe();
	// nicht constant
	void disable();
	void setTeamVonSpieler( int accountId, int spielerNummer );
	void addSpieler( int accountId );
	void removeSpieler( int accountId );
	bool tick( double tickVal );
	void doMausEreignis( MausEreignis &me );
	void render( Bild &zRObj );
	// constant

	// Reference Counting
	TeamAuswahlListe *getThis();
	TeamAuswahlListe *release();
};

class TeamAuswahlTimer
{
private:
	TextFeld *zeit;
	Knopf *bestätigen;
	int time;
	int maxTime;
	double grad;
	bool rend;
	int ref;

public:
	// Konstruktor
	TeamAuswahlTimer( Schrift *zSchrift );
	// Destruktor
	~TeamAuswahlTimer();
	// nicht constant
	void setVerbleibendeZeit( int sekunden );
	bool doMausEreignis( MausEreignis &me );
	bool tick( double tickVal );
	void render( Bild &zRObj );
	// constant
	int getZeit() const;
	// Reference Counting
	TeamAuswahlTimer *getThis();
	TeamAuswahlTimer *release();
};

class TeamAuswahlChat
{
private:
	TextFeld *nachricht;
	Knopf *senden;
	TextFeld *verlauf;
	LRahmen *rahmen;
	bool rend;
	int ref;

public:
	// Konstruktor
	TeamAuswahlChat( Schrift *zSchrift );
	// Destruktor
	~TeamAuswahlChat();
	// nicht constant
	void addNachricht( char *nachricht );
	bool tick( double tickVal );
	void doMausEreignis( MausEreignis &me );
	void doTastaturEreignis( TastaturEreignis &te );
	void render( Bild &zRObj );
	// constant

	// Reference Counting
	TeamAuswahlChat *getThis();
	TeamAuswahlChat *release();
};

class TeamAuswahl
{
private:
	double tickVal;
	int animation;
	bool sichtbar;
	int karteId;
	unsigned char alpha;
	SpielerTeamStruktur *sts;
	TeamAuswahlChat *chat;
	TeamAuswahlTimer *timer;
	TeamAuswahlListe *liste;
	Schrift *schrift;
	bool rend;
	int ref;

public:
	// Konstruktor
	TeamAuswahl( Schrift *zSchrift );
	// Destruktor
	~TeamAuswahl();
	// nicht constant
	void setKarteId( int karteId );
	void setSichtbar( bool sichtbar, bool sofort = 0 );
	void initSTS( SpielerTeamStruktur *sts );
	void addSpieler( int accountId );
	void setSpielerNummer( int accountId, int sNummer );
	void removeSpieler( int accountId );
	void verbleibendeZeit( int sekunden );
	void addNachricht( char *nachricht );
	bool tick( double tickVal );
	void doMausEreignis( MausEreignis &me );
	void doTastaturEreignis( TastaturEreignis &te );
	void render( Bild &zRObj );
	// constant
	bool istSichtbar() const;
	int getKarteId() const;
	SpielerTeamStruktur *getSTS() const;
	// Reference Counting
	TeamAuswahl *getThis();
	TeamAuswahl *release();
};

// Event Aktionen
void TeamAuswahlListeSpielerTeamAuswahlE( void *p, AuswahlBox *obj, int p1, int p2 );

#endif