#ifndef AccountSpielPartner_H
#define AccountSpielPartner_H

#include <Fortschritt.h>
#include <Fenster.h>
#include <Knopf.h>
#include <AuswahlBox.h>
#include <Thread.h>

using namespace Framework;

namespace ASPLEDStyle
{
	const int SpielArt = 1;
	const int Karte = 2;
	const int Spieler = 4;
	const int Ausklappbar = 8;
}

struct AccountSPListeEintragDaten
{
	int style;
	int id;
	Text *name;
	int anzahl;
	int prozent;
};

class AccountSPListeEintrag
{
private:
	LRahmen *ram;
	RCArray< AccountSPListeEintrag > *members;
	TextFeld *name;
	TextFeld *anzahl;
	FBalken *prozent;
	Knopf *details;
	Bild *ausklappen;
	Bild *einklappen;
	AccountSPListeEintragDaten *daten;
	Text *sortSpalte;
	bool sortAbsteigend;
	double tickVal;
	bool rend;
	int ref;

	// privat
	int getReihenfolge( int *arr );

public:
	// Konstruktor
	AccountSPListeEintrag( AccountSPListeEintragDaten *daten, Schrift *zSchrift );
	// Destruktor
	~AccountSPListeEintrag();
	// nicht constant
	void addMember( AccountSPListeEintrag *e );
	void setSortSpalte( char *sp );
	void setSortRichtung( bool absteigend );
	bool tick( double tickVal );
	void doMausEreignis( MausEreignis &me );
	void render( int xOff, int yOff, int breite, Bild &zRObj );
	// constant
	int getHeight() const;
	AccountSPListeEintragDaten *zDaten() const;
	// Reference Counting
	AccountSPListeEintrag *getThis();
	AccountSPListeEintrag *release();
};

class AccountSPListe : public Zeichnung
{
private:
	Schrift *schrift;
	LRahmen *ram;
	VScrollBar *scroll;
	RCArray< AccountSPListeEintrag > *skp;
	RCArray< AccountSPListeEintrag > *spk;
	RCArray< AccountSPListeEintrag > *psk;
	Text *gruppierung;
	Text *sortSpalte;
	bool sortAbsteigend;
	bool rend;
	int ref;

	// privat
	int getReihenfolge( int *arr );

public:
	// Konstruktor
	AccountSPListe( Schrift *zSchrift );
	// Destruktor
	~AccountSPListe();
	// nicht constant
	void reset();
	void ladeDaten( int accId );
	void setGruppierung( char *gp );
	void setSortSpalte( char *sp );
	void setSortRichtung( bool absteigend );
	bool tick( double tickVal ) override;
	void doMausEreignis( MausEreignis &me ) override;
	void render( Bild &zRObj ) override;
	// constant

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

class AccountSpielPartner : public Thread
{
private:
	Fenster *spielPartnerF;
	AuswahlBox *gruppAusw;
	AuswahlBox *sortSpalte;
	AuswahlBox *sortRichtung;
	AccountSPListe *liste;
	int status;
	int accId;
	int animation;
	unsigned char alpha;
	double tickVal;
	bool rend;
	int ref;

public:
	// Konstruktor
	AccountSpielPartner( Schrift *zSchrift );
	// Destruktor
	~AccountSpielPartner();
	// 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
	AccountSpielPartner *getThis();
	AccountSpielPartner *release();
};

#endif;