#include "Load.h"
#include "Initialisierung.h"
#include <AsynchronCall.h>
#include <Datei.h>
#include <Array.h>
#include <DateiSystem.h>
#include <Text.h>
#include "Globals.h"
#include <Textur.h>


LoadMenu::LoadMenu( Bildschirm* zScreen )
    : Menu( zScreen )
{
    step = initFBalken( 10, 90, 200, 30, FBalken::Style::normal );
    stage = initFBalken( 10, 50, 200, 30, FBalken::Style::normal );
    all = initFBalken( 10, 10, 200, 30, FBalken::Style::normal );
    elements.add( step );
    elements.add( stage );
    elements.add( all );

    new AsynchronCall( [this, zScreen]() {
        Sleep( 1000 );
        all->setAktionAnzahl( 1 );
        all->reset();
        // loading textures
        Datei texturF;
        texturF.setDatei( "data/textures" );
        RCArray<Text>* files = texturF.getDateiListe();
        if( files )
        {
            int count = 0;
            for( Text* fileName : *files )
            {
                LTDBDatei dat;
                dat.setDatei( new Text( Text( "data/textures/" ) + *fileName ) );
                dat.leseDaten( 0 );
                count += dat.getBildAnzahl();
            }
            stage->setAktionAnzahl( count );
            stage->reset();
            for( Text* fileName : *files )
            {
                LTDBDatei dat;
                dat.setDatei( new Text( Text( "data/textures/" ) + *fileName ) );
                dat.leseDaten( 0 );
                for( Text* name : *dat.zBildListe() )
                {
                    step->reset();
                    Bild* b = dat.laden( step, new Text( *name ) );
                    zScreen->zGraphicsApi()->createOrGetTextur( *fileName + "/" + *name, b )->release();
                    stage->aktionPlus();
                }
            }
            files->release();
        }
        all->aktionPlus();
        zScreen->lock();
        hide();
        menuRegister->get( "login" )->show();
        zScreen->unlock();
    } );
}