#include "TokenCore.h"

#include "Licensed.h"

#include "Platform/Windows/MainTaskPumpWin.h"
#include "Request.h"

std::unique_ptr<MainTaskPumpWin> mainWin;

int TokenCoreInitialize() {
    auto Callback = [](UINT message, WPARAM wParam, LPARAM lParam) {
        switch (message) {
        case WM_CREATE: {
            
            Licensed::Instance().UpdateToken();
            return mainWin->OnCreated(reinterpret_cast<CREATESTRUCT*>(lParam));
        }
		//case WM_DESTROY:
		//	mainWin->Destroy();
		//	break;
        case WM_TIMER: {
            if (1 == wParam) {
                if (!Licensed::Instance().CheckValid()) {
                    exit(0);
                }
            }
            else if (2 == wParam) {
                Licensed::Instance().UpdateToken();
            }
           
        }
            break;
		default:
			break;
		}
		return false;
	};
    Licensed* licensed = new Licensed;
    mainWin = MainTaskPumpWin::Create(Callback);
    return mainWin->InitWindow();
}

int TOKEN_CORE_EXPORT Run() {
    if (!mainWin) {
        return -1;
    }

    

    mainWin->Run();
    return 0;
}

void TokenCoreUninitialized() {
    if (mainWin) {
        mainWin->UninitWindow();
        mainWin.reset();
    }

    Licensed* licensed = &Licensed::Instance();
    if (nullptr != licensed) {
		delete licensed;
		licensed = nullptr;
	}
}