.PHONY: start dev backend frontend install stop fmt lint test test-db docker-build docker-up docker-down docker-logs docker-ps docker-config

ifneq (,$(wildcard .env))
include .env
export
endif

# 一键启动前后端（推荐）
start dev:
	@bash ./start.sh

backend:
	cd backend && go run ./cmd/server

frontend:
	cd frontend && npm run dev

install:
	cd backend && go mod tidy
	cd frontend && npm install

# 代码格式化（仅后端；前端由 oxlint 负责）
fmt:
	@before=$$(gofmt -l backend | wc -l | tr -d ' '); \
	gofmt -w backend; \
	echo "已格式化；之前存在格式偏差的文件数: $$before"

lint:
	cd backend && go vet ./...
	cd frontend && npm run lint

# 全量测试：集成测试依赖真实 PostgreSQL，先确保容器起来再跑。
# 测试使用临时 schema 隔离，不会污染开发库（见 backend/internal/testdb）。
test: test-db
	cd backend && go test ./...

test-db:
	@docker compose up -d postgres
	@echo "等待 PostgreSQL 就绪..."
	@for i in $$(seq 1 60); do \
		if docker compose exec -T postgres pg_isready -U "$${POSTGRES_USER:-affiliate}" -d "$${POSTGRES_DB:-affiliate_dash}" >/dev/null 2>&1; then \
			echo "PostgreSQL 已就绪"; \
			exit 0; \
		fi; \
		sleep 1; \
	done; \
	echo "PostgreSQL 启动超时，请检查: docker compose logs postgres" >&2; \
	exit 1

# 停止占用默认端口的进程
stop:
	@-lsof -tiTCP:18080 -sTCP:LISTEN | xargs kill 2>/dev/null || true
	@-lsof -tiTCP:15173 -sTCP:LISTEN | xargs kill 2>/dev/null || true
	@-lsof -tiTCP:15432 -sTCP:LISTEN | xargs kill 2>/dev/null || true
	@echo "已尝试停止 18080 / 15173 / 15432 端口服务"

# Docker 部署：宿主机只需要 Docker/Compose，前端与后端都在镜像内构建
docker-build:
	@echo "构建 Docker 镜像..."
	docker compose build

docker-up:
	@echo "启动 Docker Compose 服务..."
	docker compose up -d --build

docker-down:
	@echo "停止并移除容器..."
	docker compose down

docker-logs:
	@echo "查看 backend 和 caddy 日志..."
	docker compose logs -f backend caddy

docker-ps:
	docker compose ps

docker-config:
	docker compose config
