#ifndef MiniGames_H
#define MiniGames_H

#include <Fenster.h>
#include <Animation.h>
#include "MiniGame.h"
#include <Thread.h>
#include <Knopf.h>
#include <MiniGameV.h>
#include "DLLDateien.h"

using namespace Framework;

class MiniGames; // aus dieser Datei
class API;

class MGSuchen : private Thread
{
private:
    MiniGames * mGames;
public:
    // Konstruktor
    MGSuchen( MiniGames *mGames );
    // Destruktor
    ~MGSuchen();
    // nicht constant
    void thread() override;
};

class MGLaden : public Thread
{
private:
    Text * name;
    MiniGameV *game;
    DLLDateien *dLLs;
    API *api;

public:
    // Konstruktor
    MGLaden( char *name, DLLDateien *zDLLs, API *api );
    // Destruktor
    ~MGLaden();
    // nicht constant
    void thread();
    // constant
    bool fertig() const;
    MiniGameV *zGame() const;
};

class MiniGames : public Zeichnung
{
private:
    Punkt bildschirmGröße;
    LRahmen *rahmen;
    RCArray< MiniGame > *games;
    MGLaden *mgl;
    Schrift *schrift;
    DLLDateien *dLLs;
    Bildschirm *screen;
    API *api;
    bool mgInitialized;
    double tickVal;
    int alpha2;

public:
    // Konstruktor
    MiniGames( Schrift *zSchrift, DLLDateien *zDLLs, Bildschirm *zScreen, API *api );
    // Destruktor
    ~MiniGames();
    // nicht constant
    void addMiniGame( MiniGame *mg );
    void doMausEreignis( MausEreignis &me ) override;
    void doTastaturEreignis( TastaturEreignis &te ) override;
    bool tick( double z ) override;
    void render( Bild &zRObj ) override;
};

class API : public MinigameAPI
{
private:
    WFenster *f;
public:
    API( WFenster *wf )
    {
        f = wf;
    }
    // legt fest ob das spiel im Vollbildmodus ausgeführt werden soll
    void setFullScreenMode( bool enabled )
    {
        /*
        if( enabled )
        {
            Punkt bildschirmGröße = BildschirmGröße();
            bildschirmGröße.x++;
            bildschirmGröße.y++;
            f->setSize( bildschirmGröße );
            f->setPosition( Punkt( 0, 0 ) );
        }
        else
        {
            f->setSize( 800, 500 );
        }
        f->zBildschirm()->setBackBufferSize( f->getGröße() );
        f->zBildschirm()->update();
        */
    }
};

#endif