// basic.cpp : 定义应用程序的入口点。
//

#include "main.h"
#include "base_form.h"
#include"resource1.h"
#include  <math.h>
#include "lua_wraper.h"
#include "loger.h"

enum ThreadId
{
	kThreadUI
};

int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
	_In_opt_ HINSTANCE hPrevInstance,
	_In_ LPWSTR    lpCmdLine,
	_In_ int       nCmdShow)
{

#ifdef WIN32
	WORD wdVersion = MAKEWORD(2, 2);//定义自己需要的网络库版本,这里是2.2
	WSADATA wdSockMsg;//这是一个结构体
	int nRes = WSAStartup(wdVersion, &wdSockMsg);//打开一个套接字
	if (0 != nRes) {
		switch (nRes) {
		case WSASYSNOTREADY:
			printf("check your library");
			break;
		case WSAVERNOTSUPPORTED:
			printf("need updated");
			break;
		case WSAEINPROGRESS:
			printf("need reboot");
			break;
		case WSAEPROCLIM:
			printf("sdfsdfsa");
			break;
		}
	}
	if (2 != HIBYTE(wdSockMsg.wVersion) || 2 != LOBYTE(wdSockMsg.wVersion)) {
		printf("WSACleanup");
		WSACleanup();
		return 0;
	}
#endif

	AllocConsole();
	freopen("CONOUT$", "w", stdout);

	LuaDelegate lua;
	std::cout  << std::endl;

	lua.CallFuntion< lua_Number>(std::string("sds"),
		123.0);
	UNREFERENCED_PARAMETER(hPrevInstance);
	UNREFERENCED_PARAMETER(lpCmdLine);

	// 创建主线程
	MainThread thread;
	// 执行主线程循环
	thread.RunOnCurrentThreadWithLoop(nbase::MessageLoop::kUIMessageLoop);
	return 0;
}

void MainThread::Init()
{
	nbase::ThreadManager::RegisterThread(kThreadUI);

	// 获取资源路径,初始化全局参数
	std::wstring theme_dir = nbase::win32::GetCurrentModuleDirectory();
	wprintf(L"%s\r\n", theme_dir);
#if 1
	// Debug 模式下使用本地文件夹作为资源
	// 默认皮肤使用 resources\\themes\\default
	// 默认语言使用 resources\\lang\\zh_CN
	// 如需修改请指定 Startup 最后两个参数
	ui::GlobalManager::Startup(theme_dir + L"resources\\", ui::CreateControlCallback(), false);
#else
	// Release 模式下使用资源中的压缩包作为资源
	// 资源被导入到资源列表分类为 THEME,资源名称为 IDR_THEME
	// 如果资源使用的是本地的 zip 文件而非资源中的 zip 压缩包
	// 可以使用 OpenResZip 另一个重载函数打开本地的资源压缩包
	ui::GlobalManager::OpenResZip(MAKEINTRESOURCE(IDR_THEME2), L"THEME", "");
	//ui::GlobalManager::OpenResZip(L"resources.zip", "");
	ui::GlobalManager::Startup(L"resources\\", ui::CreateControlCallback(), false);
#endif

	auto dpiManager = ui::DpiManager::GetInstance();
	dpiManager->SetAdaptDPI();
	// 创建一个默认带有阴影的居中窗口
	BasicForm* window = new BasicForm();

	window->Create(NULL, BasicForm::kClassName.c_str(), 
		WS_OVERLAPPEDWINDOW  & WS_SIZEBOX,0,true, ui::UiRect(0,0,1024,768));
	window->CenterWindow();
	window->ShowWindow();
	window->SetInitSize(1024,768);
}

void MainThread::Cleanup()
{
	ui::GlobalManager::Shutdown();
	SetThreadWasQuitProperly(true);
	nbase::ThreadManager::UnregisterThread();
}