#pragma once
#include <Windows.h>

// ============================================================================
// WindowGuard — 独立的窗口保护模块（防关闭 / 防最小化）
//
// 用法:
//   // 安装保护
//   WindowGuard::Install(hwnd, WindowGuard::BlockClose | WindowGuard::BlockMinimize);
//   // ...
//   // 卸载保护
//   WindowGuard::Uninstall(hwnd);
//   // 需要正常关闭时，先调用 AllowClose() 再发送 WM_CLOSE
// ============================================================================

namespace WindowGuard {

enum Flag : UINT {
    BlockClose     = 1 << 0,  // 拦截 WM_CLOSE，窗口保持原样
    BlockMinimize  = 1 << 1,  // 拦截 SIZE_MINIMIZED，立即恢复
    BlockHide      = 1 << 2,  // 拦截 SWP_HIDEWINDOW，防止被外部隐藏（Win+D 等）
};

// 安装窗口保护，返回旧的 WNDPROC（可用于链式调用）
WNDPROC Install(HWND hwnd, UINT flags);

// 卸载窗口保护，恢复原始 WNDPROC
void Uninstall(HWND hwnd);

// 临时允许关闭：设为 true 后下一次 WM_CLOSE 会被放行
void SetAllowClose(HWND hwnd, bool allow);

// 标记窗口为"主动隐藏"，跳过 BlockHide 拦截（用于 clearwinicon 等场景）
void SetIntentionalHide(HWND hwnd, bool intentional);

// 查询是否安装了保护
bool IsInstalled(HWND hwnd);

} // namespace WindowGuard
