// Copyright (c) 2026 S.A. (SNOWARE). Written for SCU Team.
// Licensed under MulanPubL-2.0.
// You may obtain a copy at: http://license.coscl.org.cn/MulanPubL-2.0
// THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND.

// console_windows 模块：通过 WinAPI（GetConsoleWindow + ShowWindowAsync）控制控制台窗口的显示/隐藏。
package main

import (
	"syscall"
)

// 预加载 WinAPI 所需的 DLL 和函数。
var (
	kernel32         = syscall.NewLazyDLL("kernel32.dll")
	user32           = syscall.NewLazyDLL("user32.dll")
	getConsoleWindow = kernel32.NewProc("GetConsoleWindow")
	showWindowAsync  = user32.NewProc("ShowWindowAsync")
)

// ShowWindow 常量。
const (
	SW_HIDE = 0 // 隐藏窗口
	SW_SHOW = 5 // 显示窗口
)

// hideConsoleWindow 获取当前控制台句柄并隐藏窗口。若无控制台则无操作。
func hideConsoleWindow() {
	hwnd, _, _ := getConsoleWindow.Call()
	if hwnd != 0 {
		showWindowAsync.Call(hwnd, SW_HIDE)
		log.Debug().Msg("控制台窗口已隐藏")
	}
}

// showConsoleWindow 获取当前控制台句柄并显示窗口。若无控制台则无操作。
func showConsoleWindow() {
	hwnd, _, _ := getConsoleWindow.Call()
	if hwnd != 0 {
		showWindowAsync.Call(hwnd, SW_SHOW)
		log.Debug().Msg("控制台窗口已显示")
	}
}
