#pragma once
#include <Windows.h>
#include "Graphics.h"
#include <memory>
#include "Logger.h"
#include <vector>
#include "Section.h"
#include "Mouse.h"
#include "Stage.h"

using namespace std;

class Window
{
public:
	// ¹¹Ôìº¯Êý
	Window(HWND& hWnd, HINSTANCE& hInstance, int nCmdShow, int x, int y, Logger& logger);
	//~Window();
	Window(const Window&) = delete;
	Window& operator=(const Window&) = delete;

	// Get Graphics member
	Graphics& GetGfx();

	// Put all scene initialization here
	void InitScenes(Logger& logger);

	// Draw all scenes
	void DrawScenes(Graphics& gfx, Logger& logger) noexcept;

	// Set title for test
	void SetTitle(HWND hWnd, const std::string& title);

private:
	static LRESULT CALLBACK HandleMsgSetup(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) noexcept;
	static LRESULT CALLBACK HandleMsgThunk(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) noexcept;
	static LRESULT HandleMsg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) noexcept;

public:
	static Mouse mouse;

private:
	unique_ptr<Graphics> pGfx;
	vector<shared_ptr<Scene>> pScenes;
	shared_ptr<Stage> pStage;
};