SHELL := /bin/bash
.DEFAULT_GOAL := help
.PHONY: help install e2e lint fix format clean purge build publish

CODE = src scripts
REGISTRY = https://forgejo.emptyvessel.ru/api/packages/st/pypi

help:
	@echo ""
	@echo "📰 MCP Habr"
	@echo ""
	@echo "🛠️ Разработка:"
	@echo "   make install      Установка зависимостей"
	@echo "   make e2e          Прогон инструментов через MCP-клиент"
	@echo "   make lint         Проверка линтером"
	@echo "   make fix          Автоисправление и проверка типов"
	@echo "   make format       Форматирование кода"
	@echo "   make clean        Очистка кэша"
	@echo "   make purge        Удаление окружения и кэшей"
	@echo ""
	@echo "📤 Релиз:"
	@echo "   make build        Сборка wheel и sdist"
	@echo "   make publish      Публикация в forgejo registry"
	@echo ""

# === 🛠️ Разработка ===

install:
	@echo "📦 Установка зависимостей"
	@uv sync --extra dev

e2e:
	@[ -d .venv ] || $(MAKE) --no-print-directory install
	@echo "🧪 Прогон инструментов через MCP-клиент"
	@uv run python scripts/check.py

lint:
	@[ -d .venv ] || $(MAKE) --no-print-directory install
	@echo "🔍 Проверка линтером"
	@uv run ruff check $(CODE)

fix:
	@[ -d .venv ] || $(MAKE) --no-print-directory install
	@echo "🩹 Автоисправление и проверка типов"
	@uv run ruff check --fix $(CODE)
	@uv run ty check $(CODE)

format:
	@[ -d .venv ] || $(MAKE) --no-print-directory install
	@echo "✨ Форматирование"
	@uv run ruff format $(CODE)

clean:
	@echo "🧹 Очистка кэша"
	@find . -type d \( -name __pycache__ -o -name .ruff_cache -o -name .ty_cache \) -exec rm -rf {} + 2>/dev/null || true
	@find . -type f -name "*.pyc" -delete 2>/dev/null || true

purge: clean
	@echo "🔥 Удаление окружения"
	@rm -rf .venv

# === 📤 Релиз ===

build:
	@echo "📦 Сборка пакета"
	@rm -rf dist
	@uv build

publish: build
	@set -a; [ -f .env ] && . ./.env; set +a; \
	[ -n "$$UV_PUBLISH_PASSWORD" ] || { echo "❌ Нет UV_PUBLISH_PASSWORD в .env"; exit 1; }; \
	echo "🚀 Публикация в forgejo registry"; \
	uv publish --publish-url $(REGISTRY) --username st
