.PHONY: help install up down logs migrate downgrade revision run worker \
        test test-unit test-integration lint fmt typecheck imports secrets check smoke psql redis-cli

COMPOSE := docker compose -f deploy/docker-compose.dev.yml

help: ## 列出所有目标
	@grep -hE '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) \
		| awk 'BEGIN {FS = ":.*?## "}; {printf "  \033[36m%-18s\033[0m %s\n", $$1, $$2}'

# ── 环境 ────────────────────────────────────────────────────────────────────
install: ## 安装依赖（uv 管理，含开发依赖）
	uv sync --extra dev
	uv run pre-commit install

up: ## 起 PostgreSQL(pgvector) + Redis
	$(COMPOSE) up -d postgres redis

down: ## 停容器（保留数据卷）
	$(COMPOSE) down

logs: ## 跟踪容器日志
	$(COMPOSE) logs -f --tail=100

psql: ## 连进数据库
	$(COMPOSE) exec postgres psql -U meida -d meida

redis-cli: ## 连进 Redis
	$(COMPOSE) exec redis redis-cli

# ── 数据库 ──────────────────────────────────────────────────────────────────
migrate: ## 迁移到最新版本
	uv run alembic upgrade head

downgrade: ## 回退一个版本
	uv run alembic downgrade -1

revision: ## 生成迁移脚本：make revision m="描述"
	uv run alembic revision --autogenerate -m "$(m)"

# ── 运行 ────────────────────────────────────────────────────────────────────
run: ## 本地起 API（热重载）
	uv run uvicorn apps.api.main:app --reload --host 0.0.0.0 --port 8000

worker: ## 本地起 Celery worker
	uv run celery -A apps.worker.celery_app.celery_app worker -Q cpu,io -l INFO

# ── 质量防线（与 CI 一致，见 .github/workflows/ci.yml）─────────────────────
lint: ## ruff 检查 + 格式校验
	uv run ruff check .
	uv run ruff format --check .

fmt: ## 自动修复与格式化
	uv run ruff check --fix .
	uv run ruff format .

typecheck: ## mypy（domain 与 llm 为 strict）
	uv run mypy packages/domain packages/llm
	uv run mypy apps packages/shared packages/identity packages/billing packages/task \
		packages/agent packages/compliance packages/analytics packages/storage

imports: ## 分层依赖契约（架构文档 §4.2）
	uv run lint-imports

secrets: ## 敏感信息扫描
	uv run detect-secrets scan --baseline .secrets.baseline

test: test-unit ## 默认只跑单测（不连库、不发网络请求）

test-unit:
	uv run pytest

test-integration: ## 需要 make up && make migrate
	MEIDA_RUN_INTEGRATION=1 uv run pytest -m integration

check: lint typecheck imports test secrets ## 提交前一把过

# ── 真实链路验证（会花钱）──────────────────────────────────────────────────
smoke: ## 真调 DeepSeek，打印 ob_ai_call 与 bl_ledger
	bash scripts/smoke.sh
