PY := $(CURDIR)/.venv/bin/python
PIP := $(CURDIR)/.venv/bin/pip

.PHONY: help venv run dev run-api run-front test build up down restart logs ps deploy

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

# --- локальный запуск (без Docker) -------------------------------------------

venv:  ## Создать .venv и установить зависимости
	@test -x $(PY) || python3 -m venv .venv
	@test -x $(PIP) || { echo "Не удалось создать .venv — см. README, раздел «Если установка не идёт» (на Debian/Ubuntu нужен пакет python3-venv)"; exit 1; }
	@$(PIP) install -q --upgrade pip
	@$(PIP) install -q -r requirements-dev.txt
	@echo "Зависимости готовы (.venv). Дальше: make run"

run: venv  ## Запустить API и сайт локально, без Docker
	@echo "API:  http://127.0.0.1:8000/status"
	@echo "Сайт: http://127.0.0.1:8080  (открыть в браузере)"
	@echo "Остановить: Ctrl+C"
	@trap 'kill 0' EXIT; \
	  (cd src/backend && $(PY) -m uvicorn main:app --reload --port 8000) & \
	  (cd src/frontend && $(PY) -m uvicorn main:app --reload --port 8080) & \
	  wait

dev: run  ## То же, что run

run-api: venv  ## Запустить только API (http://127.0.0.1:8000)
	cd src/backend && $(PY) -m uvicorn main:app --reload --port 8000

run-front: venv  ## Запустить только сайт (http://127.0.0.1:8080)
	cd src/frontend && $(PY) -m uvicorn main:app --reload --port 8080

test: venv  ## Прогнать тесты
	$(PY) -m pytest tests -q

# --- Docker (продакшен) ------------------------------------------------------

build:  ## Собрать образы
	docker compose build

up:  ## Запустить сервисы в фоне
	docker compose up -d

down:  ## Остановить и удалить контейнеры
	docker compose down

restart:  ## Перезапустить сервисы
	docker compose restart

logs:  ## Логи сервисов (Ctrl+C для выхода)
	docker compose logs -f

ps:  ## Статус сервисов
	docker compose ps

deploy:  ## Собрать и запустить (docker)
	./deploy.sh
