/**
 * @file Window.cpp
 * @brief window 句柄对象成员函数实现。
 * @details
 * 本文件将 window 类的高层接口转发到平台后端函数：
 * - full screen、caption、resize 等操作；
 * - 原生句柄与尺寸查询；
 * - 窗口关闭状态查询。
 * 通过 INCLUDE_WINDOW_CPP 宏控制其编译包含方式。
 */
#if INCLUDE_WINDOW_CPP
#include "Window.h"

namespace XEngine::platform {


/**
 * @brief 设置窗口全屏状态。
 * @param is_fullscreen 目标全屏状态。
 */
void
window::set_fullscreen(bool is_fullscreen) const
{
	assert(is_valid());
	set_window_fullscreen(_id, is_fullscreen);
}
/**
 * @brief 查询窗口是否处于全屏状态。
 * @return 全屏返回 true。
 */
bool
window::is_fullscreen() const
{
	assert(is_valid());
	return is_window_fullscreen(_id);
}
/**
 * @brief 获取原生窗口句柄。
 * @return 平台相关窗口句柄指针。
 */
void*
window::handle() const
{
	assert(is_valid());
	return get_window_handle(_id);
}
/**
 * @brief 设置窗口标题。
 * @param caption 标题文本。
 */
void
window::set_caption(const wchar_t* caption) const
{
	assert(is_valid());
	set_window_caption(_id, caption);
}

/**
 * @brief 获取窗口矩形坐标。
 * @return 左上右下坐标向量。
 */
math::u32v4 window::size() const
{
	assert(is_valid());
	return get_window_size(_id);
}
/**
 * @brief 调整窗口客户区尺寸。
 * @param width 目标宽度。
 * @param height 目标高度。
 */
void
window::resize(u32 width, u32 height)const
{
	assert(is_valid());
	resize_window(_id, width, height);
}

/**
 * @brief 获取窗口当前宽度。
 * @return 宽度像素值。
 */
u32
window::width()const
{
	assert(is_valid());
	math::u32v4 s{ size() };
	return s.z - s.x;
}

/**
 * @brief 获取窗口当前高度。
 * @return 高度像素值。
 */
u32
window::height()const
{
	assert(is_valid());
	math::u32v4 s{ size() };
	return s.w - s.y;
}
/**
 * @brief 查询窗口是否已关闭。
 * @return 已关闭返回 true。
 */
bool
window::is_closed()const
{
	assert(is_valid());
	return is_window_close(_id);
}

}


#endif //INCLUDE_WINDOW_CPP
