#include <Bildschirm.h>
#include <Datei.h>
#include <DateiSystem.h>
#include <Fenster.h>
#include <GraphicsApi.h>
#include <HttpRequest.h>
#include <JSON.h>
#include <main.h>
#include <Network.h>
#include <RenderThread.h>
#include <Schrift.h>

#include "CustomDX11API.h"
#include "Globals.h"

int KSGStart Framework::Start(Framework::Startparam p)
{
    Network::Start(20);
    initVariables();
    setDebugDX(1);

    Datei d;
    d.setDatei("data/schriften");
    auto list = d.getDateiListe();
    for (Text* fontFile : *list)
    {
        LTDSDatei dat;
        dat.setPfad(
            new Text(Text("data/schriften/").operator+(fontFile->getText())));
        dat.leseDaten();
        Text* name = fontFile->getTeilText(0, fontFile->getLength() - 5);
        fontRegister->put(*name, RCPointer<Schrift>::of(dat.ladeSchrift()));
        name->release();
    }
    list->release();

    WFenster window;
    ::window = &window;
    WNDCLASS wc = Framework::F_Normal(p.hinst);
    wc.lpszClassName = "Factory Craft";
    window.erstellen(WS_POPUPWINDOW, wc);
    Monitor m = Framework::getMonitor(0);
    window.setBounds(Punkt(m.x, m.y), Punkt(m.breite, m.height));
    window.setAnzeigeModus(SW_SHOWNORMAL);
    window.setVSchließAktion([&window](void* p, void* f) {
        StopNachrichtenSchleife(window.getFensterHandle());
    });
    window.setMausAktion(_ret1ME);
    window.setTastaturAktion(_ret1TE);
    Bildschirm3D screen(
        dynamic_cast<WFenster*>(window.getThis()), new CustomDX11API());
    screen.setHandleUserInputsOnTick(1);
    window.setBildschirm(dynamic_cast<Bildschirm*>(screen.getThis()));
    screen.setFillFarbe(0);

    uiFactory = Framework::defaultUI(fontRegister->get("normal"), &screen);
    initMenus();

    RenderTh rTh;
    rTh.setMaxFps(60);
    rTh.setQuiet(1);
    rTh.setBildschirm(dynamic_cast<Bildschirm*>(screen.getThis()));

    rTh.beginn();
    StartNachrichtenSchleife();
    rTh.beenden();
    releaseVariables();
    Network::Exit();
    return 0;
}