PNPM ?= pnpm
GO ?= go
CONFIGURATION ?= debug

.PHONY: help install dev build check check-web check-core app-build app-run app-package macos windows linux

help: ## 查看常用命令
	@awk 'BEGIN {FS = ":.*## "} /^[a-z-]+:.*## / && !seen[$$1]++ {printf "  %-14s %s\n", $$1, $$2}' $(MAKEFILE_LIST)

install: ## 安装锁定版本的前端依赖
	$(PNPM) --dir web install --frozen-lockfile

dev: ## 启动浏览器开发预览
	$(PNPM) --dir web run dev

build: ## 构建前端
	$(PNPM) --dir web run build

check: check-web check-core ## 验证前端与核心

check-web: ## 静态检查、构建前端并运行浏览器测试
	$(PNPM) --dir web run check

check-core: ## 运行核心检查（格式、静态分析与竞态测试）
	@unformatted="$$(gofmt -l cmd internal desktop/linux)"; if [ -n "$$unformatted" ]; then echo "未格式化：$$unformatted" >&2; exit 1; fi
	$(GO) vet ./...
	GOOS=linux $(GO) -C desktop/linux vet ./...
	$(GO) test -race ./...

ifeq ($(OS),Windows_NT)
app-build: windows ## 构建本机桌面应用
app-run: app-build ## 构建并打开桌面应用
	powershell -NoProfile -Command "Start-Process artifacts/windows-x64/yovoice.exe"
app-package: ## 构建桌面应用和发布安装包
	powershell -NoProfile -ExecutionPolicy Bypass -File scripts/desktop/build-windows.ps1 -Package
else ifeq ($(shell uname -s),Linux)
app-build: linux ## 构建本机桌面应用
app-run: app-build ## 构建并打开桌面应用
	artifacts/linux-x64/yovoice/yovoice-desktop
app-package: ## 构建桌面应用和发布安装包
	YOVOICE_PACKAGE=1 GO_BIN="$(GO)" scripts/desktop/build-linux.sh
else
app-build: macos ## 构建本机桌面应用
app-run: app-build ## 构建并打开桌面应用
	scripts/desktop/run-macos.sh
app-package: ## 构建桌面应用和发布安装包
	YOVOICE_PACKAGE=1 GO_BIN="$(GO)" CONFIGURATION="$(CONFIGURATION)" scripts/desktop/build-macos.sh
endif

macos: ## 构建 macOS 应用
	GO_BIN="$(GO)" CONFIGURATION="$(CONFIGURATION)" scripts/desktop/build-macos.sh

linux: ## 构建 Linux 应用（在 Linux x64 运行）
	GO_BIN="$(GO)" scripts/desktop/build-linux.sh

windows: ## 构建 Windows 应用（在 Windows 运行）
	powershell -NoProfile -ExecutionPolicy Bypass -File scripts/desktop/build-windows.ps1

.PHONY: cli-build cli-package
cli-build: ## 构建独立 CLI，无需前端或桌面 App
	python3 scripts/build-ffmpeg.py artifacts/tools
	$(GO) build -o artifacts/yovoice$(if $(filter Windows_NT,$(OS)),.exe,) ./cmd/yovoice

cli-package: ## 打包独立 CLI 与 Skill
	GO="$(GO)" python3 scripts/package-cli.py
