#ifndef SpielStatistik_H
#define SpielStatistik_H

#include <SpielStatistikV.h>
#include "SpielStatistikDaten.h"
#include "StatistikChat.h"
#include "StatistikTabelle.h"

class SpielStatistik : public SpielStatistikV
{
private:
    void( *addNachrichtF )( void *, Text *, Text *, Text *, Text * );
    void( *addChatF )( void *, int );
    void( *addFreundF )( void *, int );
    void( *accountAnsehenF )( void *, int );
    bool( *istFreundF )( void *, int );
    void *nachrichtParam;
    BilderV *bilder;
    Schrift *schrift;
    Bildschirm *screen;
    KSGClient::InformationServerClient *infoc;
    KSGClient::SpielServerClient *spielc;
    CRITICAL_SECTION cs;
    Array< SSDSpieler * > *gss;
    Array< SSDTeam * > *gts;
    StatistikChat *chat;
    StatistikTabelle *tabelle;
    int accountId;
    bool rend;
    int status;
    int ref;

public:
    // Konstruktor
    SpielStatistik();
    // Destruktor
    ~SpielStatistik();
    // nicht constant
    void lock();
    void unlock();
    void bereit() override;
    void setBilder( BilderV *b ) override;
    void setAccountId( int id ) override;
    void setR�ckrufFunktionen( void( *addNachrichtF )( void *, Text *, Text *, Text *, Text * ),
                               void( *addChatF )( void *, int ), void( *addFreundF )( void *, int ),
                               void( *accountAnsehenF )( void *, int ), bool( *istFreundF )( void *, int ), void *nachrichtParam ) override;
    void setSchrift( Schrift *schrift ) override;
    void setBildschirm( Bildschirm *zScreen ) override;
    void setKlients( KSGClient::InformationServerClient *infoc, KSGClient::SpielServerClient *spielc ) override;
    void nachricht( int l�n, char *bytes ) override;
    void doPublicMausEreignis( MausEreignis &me ) override;
    void doTastaturEreignis( TastaturEreignis &te ) override;
    bool tick( double zeit ) override;
    void render( Bild &zRObj ) override;
    void verlassen() override;
    // constant
    int getStatus() const override; // 0 = laden, 1 = l�uft, 2 = fortsetzen
    // Reference Counting
    SpielStatistikV *getThis() override;
    SpielStatistikV *release() override;
};

#endif