#ifndef AccountSpieleUndKarten_H
#define AccountSpieleUndKarten_H

#include <Schrift.h>
#include <Fenster.h>
#include <Thread.h>
#include <AuswahlBox.h>

using namespace Framework;

class AccountSUKListeKarte
{
private:
	LRahmen *ram;
	TextFeld *name;
	TextFeld *spiele;
	TextFeld *gewonnen;
	TextFeld *status;
	Text *na;
	int sp;
	int gw;
	Text *st;
	int karteId;
	bool rend;
	int ref;

public:
	// Konstruktor
	AccountSUKListeKarte( Schrift *zSchrift, int id, int account );
	// Destruktor
	~AccountSUKListeKarte();
	// nicht constant
	void render( int yOff, Bild &zRObj );
	// constant
	Text *zName() const;
	int getSpiele() const;
	int getGewonnen() const;
	Text *zStatus() const;
	// Reference Counting
	AccountSUKListeKarte *getThis();
	AccountSUKListeKarte *release();
};

class AccountSUKListeSpiel
{
private:
	LRahmen *ram;
	TextFeld *nameTF;
	TextFeld *spieleTF;
	TextFeld *gewonnenTF;
	TextFeld *punkteTF;
	TextFeld *statusTF;
	Knopf *details;
	RCArray< AccountSUKListeKarte > *karten;
	Bild *einklappen;
	Bild *ausklappen;
	Text *name;
	int spiele;
	int gewonnen;
	int punkte;
	Text *status;
	Text *statusFilter;
	Text *sortSpalte;
	bool sortAbsteigend;
	int spielId;
	double tickVal;
	bool rend;
	int ref;

	// privat
	int getReihenfolge( int *arr );

public:
	// Konstruktor
	AccountSUKListeSpiel( Schrift *zSchrift, int id, int account );
	// Destruktor
	~AccountSUKListeSpiel();
	// nicht constant
	void setStatusAusw( char *status );
	void setSortSpalte( char *spalte );
	void setSortRichtung( bool absteigend );
	bool tick( double tickVal );
	void doMausEreignis( MausEreignis &me );
	void render( int yOff, Bild &zRObj );
	// constant
	int getHöhe() const;
	Text *zName() const;
	int getSpiele() const;
	int getGewonnen() const;
	int getPunkte() const;
	Text *zStatus() const;
	// Reference Counting
	AccountSUKListeSpiel *getThis();
	AccountSUKListeSpiel *release();
};

class AccountSUKListe : public Zeichnung
{
private:
	LRahmen *ram;
	VScrollBar *scroll;
	RCArray< AccountSUKListeSpiel > *spiele;
	Text *status;
	Text *statusFilter;
	Text *sortSpalte;
	bool sortAbsteigend;
	bool rend;
	int ref;

	// privat
	int getReihenfolge( int *arr );

public:
	// Konstruktor
	AccountSUKListe();
	// Destruktor
	~AccountSUKListe();
	// nicht constant
	void reset();
	void addSpiel( AccountSUKListeSpiel *spiel );
	void setStatusAusw( char *status );
	void setSortSpalte( char *spalte );
	void setSortRichtung( bool absteigend );
	bool tick( double tickVal ) override;
	void doMausEreignis( MausEreignis &me ) override;
	void render( Bild &zRObj ) override;
	// constant

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

class AccountSpieleUndKarten : public Thread
{
private:
	Schrift *schrift;
	Fenster *spieleUndKartenF;
	AuswahlBox *statusAusw;
	AuswahlBox *sortSpalte;
	AuswahlBox *sortRichtung;
	AccountSUKListe *liste;
	int status;
	int accId;
	int animation;
	unsigned char alpha;
	double tickVal;
	bool rend;
	int ref;

public:
	// Konstruktor
	AccountSpieleUndKarten( Schrift *zSchrift );
	// Destruktor
	~AccountSpieleUndKarten();
	// nicht constant
	void reset();
	void ladeStatistik( int accId );
	virtual void thread();
	void setSichtbar( bool sichtbar, bool nachRechts );
	bool tick( double zeit );
	void doMausEreignis( MausEreignis &me );
	void render( Bild &zRObj );
	// constant
	int getStatus() const;
	// Reference Counting
	AccountSpieleUndKarten *getThis();
	AccountSpieleUndKarten *release();
};

#endif