.PHONY: lint fmt check test

GOBIN := $(HOME)/go/bin
BIN_GOFUMPT   := $(GOBIN)/gofumpt
BIN_GOIMPORTS := $(GOBIN)/goimports
BIN_LINT      := $(GOBIN)/golangci-lint

# === 代码格式化 ===
fmt:
	@echo "==> gofumpt..."
	@$(BIN_GOFUMPT) -l -w internal/ cmd/
	@echo "==> goimports..."
	@$(BIN_GOIMPORTS) -w internal/ cmd/

# === 格式检查（CI 用，只读不改） ===
fmt-check:
	@echo "==> gofumpt check..."
	@test -z "$$($(BIN_GOFUMPT) -l internal/ cmd/)" || (echo "gofumpt: 以下文件格式不正确：" && $(BIN_GOFUMPT) -l internal/ cmd/ && exit 1)
	@echo "==> goimports check..."
	@test -z "$$($(BIN_GOIMPORTS) -l internal/ cmd/)" || (echo "goimports: 以下文件 import 不规范：" && $(BIN_GOIMPORTS) -l internal/ cmd/ && exit 1)

# === 静态分析（报告模式，不阻断） ===
lint:
	@echo "==> golangci-lint (report only)..."
	@$(BIN_LINT) run ./... || true

# === 静态分析（阻断模式，CI 用） ===
lint-strict:
	@echo "==> golangci-lint (strict)..."
	@$(BIN_LINT) run ./...

# === 测试 ===
test:
	@echo "==> go test..."
	@go test -v -race ./...

# === CI 完整流程（报告模式） ===
ci:
	@$(MAKE) fmt-check
	@$(MAKE) lint
