
.PHONY: help
help:
	@echo "Available commands:"
	@echo "  make build            - Build release version"
	@echo "                          Optional: VERSION, PLATFORM, ARCH, NO_TELEMETRY=1"
	@echo "  make dev              - Build development version (with debug info)"
	@echo "                          Optional: VERSION, PLATFORM, ARCH, NO_TELEMETRY=1"
	@echo "  make dev-incremental  - Incremental dev build (only rebuild if sources changed)"
	@echo "  make test             - Run unit tests"
	@echo "  make test-e2e         - Run E2E tests with Playwright"
	@echo "  make test-e2e-ui      - Run E2E tests with Playwright UI mode"
	@echo "  make show-report      - Open Playwright test report in browser"
	@echo "  make serve-report     - Start report server (fetches source from GitHub)"
	@echo "  make install-e2e      - Install E2E test dependencies"
	@echo "  make build-web        - Build frontend"
	@echo "  make generate         - Run go generate"
	@echo "  make clean            - Clean build artifacts"
	@echo "  make lint             - Run linter"
	@echo "  make release          - Build release for all platforms"

build: bililive
.PHONY: build

bililive:
	@go run build.go release $(if $(VERSION),--version $(VERSION),) $(if $(PLATFORM),--platform $(PLATFORM),) $(if $(ARCH),--arch $(ARCH),) $(if $(NO_TELEMETRY),--no-telemetry,)

# 开发版构建（支持可选参数）
# 用法:
#   make dev                                                  - 普通开发构建
#   make dev VERSION=v0.8.0-rc.1                              - 指定版本号
#   make dev PLATFORM=linux ARCH=amd64                        - 交叉编译
#   make dev PLATFORM=linux ARCH=amd64 VERSION=v0.8.0-rc.2.1  - 交叉编译 + 指定版本号
#   make dev NO_TELEMETRY=1                                   - 禁用启动统计上报
.PHONY: dev
dev:
	@go run build.go dev $(if $(VERSION),--version $(VERSION),) $(if $(PLATFORM),--platform $(PLATFORM),) $(if $(ARCH),--arch $(ARCH),) $(if $(NO_TELEMETRY),--no-telemetry,)


# 收集所有 Go 源文件作为依赖（使用通配符，兼容 Windows）
GO_SOURCES := $(wildcard src/**/*.go src/**/**/*.go src/**/**/**/*.go)
GO_MOD_FILES := go.mod go.sum

# 开发版二进制输出路径（跨平台统一名称）
ifeq ($(OS),Windows_NT)
    DEV_BINARY := bin/bililive-dev.exe
else
    DEV_BINARY := bin/bililive-dev
endif

# 增量编译：只在源码变化时重新编译
# Make 会比较目标文件和依赖文件的修改时间，只在需要时执行编译
$(DEV_BINARY): $(GO_SOURCES) $(GO_MOD_FILES)
	@go run build.go dev-incremental

# dev-incremental 目标：便于记忆的别名
.PHONY: dev-incremental
dev-incremental: $(DEV_BINARY)


.PHONY: release
release: build-web generate
	@./src/hack/release.sh

.PHONY: release-no-web
release-no-web: generate
	@./src/hack/release.sh

.PHONY: release-docker
release-docker:
	@./src/hack/release-docker.sh

.PHONY: test
test:
	@go run build.go test

.PHONY: clean
clean:
	@go run build.go clean

.PHONY: generate
generate:
	go run build.go generate

.PHONY: build-web
build-web:
	go run build.go build-web

# run 目标已移除（foreman 是平台特定的）
# 请直接使用 make dev 后运行生成的二进制文件

.PHONY: lint
lint:
	golangci-lint run --path-mode=abs --build-tags=dev

# 同步 AGENTS.md 到其他 AI 指示文件
.PHONY: sync-agents
sync-agents:
	@go run build.go sync-agents

# 检查 AI 指示文件是否一致（用于 CI）
.PHONY: check-agents
check-agents:
	@go run build.go check-agents

# E2E 测试（使用 Playwright）
.PHONY: test-e2e
test-e2e:
	npx playwright test

# 安装 E2E 测试依赖
.PHONY: install-e2e
install-e2e:
	yarn install --frozen-lockfile
	npx playwright install --with-deps chromium

# 运行 E2E 测试（带 UI）
.PHONY: test-e2e-ui
test-e2e-ui:
	npx playwright test --ui

# 查看 E2E 测试报告（带源码支持，需要本地源码）
.PHONY: show-report
show-report:
	npx playwright show-report playwright-report

# 启动报告服务器（可从 GitHub 获取源码，适合查看 CI 报告）
# 用法: 
#   make serve-report                    # 本地模式
#   make serve-report COMMIT=abc123      # 从 GitHub 获取源码
.PHONY: serve-report
serve-report:
	@node scripts/report-server.js $(if $(COMMIT),--commit $(COMMIT),)
