.DEFAULT_GOAL := help
.PHONY: help dev dev-down dev-logs dev-rebuild migrate db-shell \
        fmt lint test check sqlx-prepare build-image push-image deploy clean

DEV_COMPOSE := docker-compose.yml
PROD_COMPOSE := docker-compose.prod.yml
IMAGE ?= ghcr.io/nineap/netrunner-control-plane:latest

help: ## Показать список команд
	@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) \
		| awk 'BEGIN {FS = ":.*?## "}; {printf "  \033[36m%-16s\033[0m %s\n", $$1, $$2}'

# ----------------------------------------------------------------------
# Локальная разработка (fully-dockerized, hot-reload)
# ----------------------------------------------------------------------
dev: ## Поднять локальный стек (db+redis+app с автоперекомпиляцией)
	docker compose -f $(DEV_COMPOSE) up --build

dev-down: ## Остановить локальный стек (тома сохраняются)
	docker compose -f $(DEV_COMPOSE) down

dev-logs: ## Логи приложения в дев-стеке
	docker compose -f $(DEV_COMPOSE) logs -f app

dev-rebuild: ## Пересобрать дев-образ приложения с нуля
	docker compose -f $(DEV_COMPOSE) build --no-cache app

migrate: ## Применить миграции в дев-БД
	docker compose -f $(DEV_COMPOSE) run --rm app cargo run -- --migrate

db-shell: ## Зайти в psql дев-БД
	docker compose -f $(DEV_COMPOSE) exec db psql -U netrunner_admin -d netrunner

# ----------------------------------------------------------------------
# Качество кода (то же, что гоняет CI)
# ----------------------------------------------------------------------
fmt: ## Форматирование
	cargo fmt --all

lint: ## Clippy как в CI (-D warnings)
	SQLX_OFFLINE=true cargo clippy --all-targets -- -D warnings

test: ## Тесты (нужен запущенный Postgres + DATABASE_URL)
	cargo test --all-targets

check: fmt lint ## fmt + lint одной командой

sqlx-prepare: ## Обновить offline-кеш sqlx (если появятся query!-макросы)
	cargo sqlx prepare

# ----------------------------------------------------------------------
# Прод-образ (обычно это делает CI, но можно и локально)
# ----------------------------------------------------------------------
build-image: ## Собрать прод-образ локально
	docker build -t $(IMAGE) .

push-image: ## Запушить прод-образ в GHCR
	docker push $(IMAGE)

deploy: ## Подсказка: деплой запускается вручную из GitHub Actions
	@echo "Деплой выкатывается вручную: GitHub → Actions → 'Deploy to VPS (Manual)' → Run workflow."

clean: ## Снести дев-стек вместе с томами (БД и кеши компиляции!)
	docker compose -f $(DEV_COMPOSE) down -v
