.PHONY: all build run stop test lint migrate-up clean help

SERVICES = gateway auth-service purchaser-service textile-service washing-service

help: ## 显示帮助信息
	@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'

all: build ## 构建所有服务

build: ## 构建所有服务二进制
	@for svc in $(SERVICES); do \
		echo "==> Building $$svc..."; \
		cd $$svc && go build -o bin/$$svc ./cmd/ && cd ..; \
	done
	@echo "==> All services built."

run: ## 启动所有服务 (Docker Compose)
	docker-compose up --build -d

run-dev: ## 启动开发环境 (前台，含日志)
	docker-compose up --build

stop: ## 停止所有服务
	docker-compose down

restart: stop run ## 重启所有服务

logs: ## 查看所有服务日志
	docker-compose logs -f

logs-%: ## 查看指定服务日志 (如: make logs-gateway)
	docker-compose logs -f $*

test: ## 运行所有服务的测试
	@for svc in $(SERVICES); do \
		echo "==> Testing $$svc..."; \
		cd $$svc && go test ./... -v && cd ..; \
	done

lint: ## 代码检查
	@for svc in $(SERVICES); do \
		echo "==> Linting $$svc..."; \
		cd $$svc && go vet ./... && cd ..; \
	done

tidy: ## 整理所有模块依赖
	@for svc in shared $(SERVICES); do \
		echo "==> Tidying $$svc..."; \
		cd $$svc && go mod tidy && cd ..; \
	done

migrate-up: ## 执行数据库迁移
	@echo "==> Running database migrations..."
	@PGPASSWORD=$${DB_PASSWORD:-iloom_secret_2024} psql -h localhost -U $${POSTGRES_USER:-iloom} -d $${POSTGRES_DB:-iloom} -f scripts/init-schemas.sql
	@echo "==> Migrations complete."

clean: ## 清理构建产物
	@for svc in $(SERVICES); do \
		rm -rf $$svc/bin; \
	done
	@echo "==> Cleaned."

dev-%: ## 单独运行指定服务 (如: make dev-gateway)
	cd $* && go run ./cmd/

docker-build-%: ## 单独构建指定服务镜像 (如: make docker-build-gateway)
	docker-compose build $*

health: ## 检查所有服务健康状态
	@echo "Gateway:   $$(curl -s -o /dev/null -w '%{http_code}' http://localhost:8080/health)"
	@echo "Auth:      $$(curl -s -o /dev/null -w '%{http_code}' http://localhost:8081/health)"
	@echo "Purchaser: $$(curl -s -o /dev/null -w '%{http_code}' http://localhost:8082/health)"
	@echo "Textile:   $$(curl -s -o /dev/null -w '%{http_code}' http://localhost:8083/health)"
	@echo "Washing:   $$(curl -s -o /dev/null -w '%{http_code}' http://localhost:8084/health)"
