package main

import (
	"embed"
	"net/http"
	"time"

	"github.com/wailsapp/wails/v3/pkg/application"
)

//go:embed all:frontend/dist
var assets embed.FS

// 标题栏颜色（0x00BBGGRR）
var (
	titleBarLight = uint32(0xF0F0F0) // #F0F0F0 近白
	titleBarDark  = uint32(0x2D2D2D)  // #2D2D2D 深灰
)

func main() {
	app := NewApp()

	wailsApp := application.New(application.Options{
		Name:        "U-Desk",
		Description: "桌面文件管理器",
		Services: []application.Service{
			application.NewService(app),
		},
		Assets: application.AssetOptions{
			Handler: application.AssetFileServerFS(assets),
			Middleware: func(next http.Handler) http.Handler {
				return http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
					if req.URL.Path == "/wails/custom.js" {
						// custom.js 未使用，返回空响应避免 404 控制台报错
						rw.Header().Set("Content-Type", "application/javascript")
						rw.WriteHeader(200)
						return
					}
					next.ServeHTTP(rw, req)
				})
			},
		},
		Mac: application.MacOptions{
			ApplicationShouldTerminateAfterLastWindowClosed: true,
		},
	})

	window := application.Get().Window.NewWithOptions(application.WebviewWindowOptions{
		Title:            "U-Desk",
		Width:            1400,
		Height:           900,
		MinWidth:         1000,
		MinHeight:        600,
		BackgroundColour: application.NewRGB(255, 255, 255),
		URL:              "/",
		Frameless: true,
			// 保留 Windows 11 原生装饰（圆角 + Aero 阴影）
		Windows: application.WindowsWindow{
			Theme: application.SystemDefault,
			CustomTheme: application.ThemeSettings{
				LightModeActive: &application.WindowTheme{
					TitleBarColour: &titleBarLight,
					BorderColour:   &titleBarLight,
				},
				DarkModeActive: &application.WindowTheme{
					TitleBarColour: &titleBarDark,
					BorderColour:   &titleBarDark,
				},
			},
		},
	})

	app.SetMainWindow(window)

	// production+devtools 模式下 OpenInspectorOnStartup 不生效（需 debugMode=true）
	// 手动延迟调用 OpenDevTools 弹出 Inspector
	// TODO: 替换为 OnDomReady 回调，当前 alpha.80 可能未稳定支持
	go func() {
		time.Sleep(2 * time.Second)
		window.OpenDevTools()
	}()

	if err := wailsApp.Run(); err != nil {
		println("Error:", err.Error())
	}
}
