.PHONY: build clean test docker run scheduler agent help

# 项目名称
PROJECT_NAME := proxy-platform
VERSION := 1.0.0
BUILD_DIR := bin

# Go 参数
GO := go
GOFLAGS := -v
LDFLAGS := -ldflags "-s -w -X main.Version=$(VERSION)"

# Docker 参数
DOCKER := docker
DOCKER_COMPOSE := docker-compose

# 默认目标
.DEFAULT_GOAL := help

## build: 构建所有组件
build: scheduler agent

## scheduler: 构建调度中心
scheduler:
	@echo "构建调度中心..."
	@mkdir -p $(BUILD_DIR)
	$(GO) build $(GOFLAGS) $(LDFLAGS) -o $(BUILD_DIR)/scheduler ./cmd/scheduler

## agent: 构建节点 Agent
agent:
	@echo "构建节点 Agent..."
	@mkdir -p $(BUILD_DIR)
	$(GO) build $(GOFLAGS) $(LDFLAGS) -o $(BUILD_DIR)/agent ./cmd/agent

## clean: 清理构建产物
clean:
	@echo "清理构建产物..."
	@rm -rf $(BUILD_DIR)
	@rm -f coverage.out

## test: 运行测试
test:
	@echo "运行测试..."
	$(GO) test -v -race -coverprofile=coverage.out ./...

## test-coverage: 查看测试覆盖率
test-coverage: test
	$(GO) tool cover -html=coverage.out

## docker: 构建 Docker 镜像
docker:
	@echo "构建 Docker 镜像..."
	$(DOCKER) build -t $(PROJECT_NAME)-scheduler:$(VERSION) -f deployments/Dockerfile.scheduler .
	$(DOCKER) build -t $(PROJECT_NAME)-agent:$(VERSION) -f deployments/Dockerfile.agent .

## docker-compose-up: 使用 Docker Compose 启动
docker-compose-up:
	@echo "启动服务..."
	$(DOCKER_COMPOSE) -f deployments/docker-compose.yml up -d

## docker-compose-down: 停止 Docker Compose 服务
docker-compose-down:
	@echo "停止服务..."
	$(DOCKER_COMPOSE) -f deployments/docker-compose.yml down

## docker-compose-logs: 查看 Docker Compose 日志
docker-compose-logs:
	$(DOCKER_COMPOSE) -f deployments/docker-compose.yml logs -f

## run-scheduler: 本地运行调度中心
run-scheduler:
	@echo "运行调度中心..."
	$(GO) run ./cmd/scheduler

## run-agent: 本地运行节点 Agent
run-agent:
	@echo "运行节点 Agent..."
	$(GO) run ./cmd/agent

## deps: 安装依赖
deps:
	@echo "安装依赖..."
	$(GO) mod download
	$(GO) mod tidy

## lint: 运行代码检查
lint:
	@echo "运行代码检查..."
	@golangci-lint run ./...

## fmt: 格式化代码
fmt:
	@echo "格式化代码..."
	$(GO) fmt ./...

## migrate-up: 运行数据库迁移
migrate-up:
	@echo "运行数据库迁移..."
	$(GO) run ./cmd/scheduler migrate

## help: 显示帮助信息
help:
	@echo "代理管理平台 Makefile"
	@echo ""
	@echo "使用方法:"
	@echo "  make [target]"
	@echo ""
	@echo "目标:"
	@sed -n 's/^## /  /p' $(MAKEFILE_LIST) | column -t -s ':'

# 显示变量
show-vars:
	@echo "PROJECT_NAME: $(PROJECT_NAME)"
	@echo "VERSION: $(VERSION)"
	@echo "BUILD_DIR: $(BUILD_DIR)"