# Makefile для удобной работы с проектом

.PHONY: help install dev-up dev-down test lint format migrate createsuperuser shell

help:
	@echo "Доступные команды:"
	@echo ""
	@echo "🔧 Установка и настройка:"
	@echo "  make install          - Установка зависимостей"
	@echo ""
	@echo "🐳 Docker управление:"
	@echo "  make dev-up           - Запуск разработческого окружения (Docker)"
	@echo "  make dev-down         - Остановка разработческого окружения"
	@echo "  make logs             - Просмотр логов (Docker)"
	@echo ""
	@echo "🧪 Тестирование:"
	@echo "  make test             - Запуск тестов (по умолчанию все)"

	@echo "  Примеры:"
	@echo "    make test                    # Все тесты"
	@echo "    make test TARGET=user        # Только user app"
	@echo "    make test TARGET=test_models # Только модели"
	@echo ""
	@echo "🔍 Качество кода:"
	@echo "  make lint             - Проверка кода линтерами"
	@echo "  make format           - Форматирование кода"
	@echo "  make type-check       - Проверка типов"
	@echo "  make security-check   - Проверка безопасности"
	@echo "  make pre-commit       - Запуск pre-commit hooks"
	@echo ""
	@echo "🗄️ База данных:"
	@echo "  make migrate          - Выполнение миграций Django"
	@echo "  make createsuperuser  - Создание суперпользователя"
	@echo ""
	@echo "🛠️ Утилиты:"
	@echo "  make shell            - Запуск Django shell"
	@echo "  make setup-dev        - Настройка окружения разработки"
	@echo "  make clean            - Очистка временных файлов"

install:
	uv pip install -r requirements.txt
	uv pip install -r requirements-dev.txt

dev-up:
	docker-compose up -d
	@echo "Сервисы запущены. Приложение доступно по адресу: http://localhost:8000"

dev-down:
	docker-compose down

# Универсальная команда для тестирования с поддержкой аргументов
# Использование:
#   make test                    # Все тесты
#   make test TARGET=user        # Тесты user app
#   make test TARGET=models      # Тесты моделей
#   make test TARGET=views       # Тесты представлений
#   make test TARGET=serializers # Тесты сериализаторов
#   make test TARGET=services    # Тесты сервисов
test:
	@if [ "$(TARGET)" ]; then \
		echo "🧪 Запуск тестов: $(TARGET)"; \
		python run_tests_simple.py $(TARGET); \
	else \
		echo "🧪 Запуск всех тестов..."; \
		python run_tests_simple.py; \
	fi

lint:
	@echo "🔍 Проверка кода линтерами..."
	ruff check src/
	black --check src/
	isort --check-only src/
	@echo "✅ Линтинг завершен"

format:
	@echo "🎨 Форматирование кода..."
	black src/
	isort src/
	ruff check --fix src/
	@echo "✅ Форматирование завершено"

migrate:
	@echo "🗄️ Выполнение миграций..."
	cd src && python manage.py makemigrations
	cd src && python manage.py migrate

createsuperuser:
	@echo "👤 Создание суперпользователя..."
	cd src && python manage.py createsuperuser

shell:
	@echo "🐚 Запуск Django shell..."
	cd src && python manage.py shell

logs:
	@echo "📋 Просмотр логов..."
	docker-compose logs -f

# Дополнительные команды для тестирования
test-cov:
	@echo "🧪 Запуск тестов с покрытием..."
	python run_tests_simple.py --coverage

test-fast:
	@echo "🚀 Быстрые тесты (без медленных)..."
	python run_tests_simple.py --fast

test-parallel:
	@echo "⚡ Параллельный запуск тестов..."
	python run_tests_simple.py --parallel=auto

test-failfast:
	@echo "❌ Тесты с остановкой при первой ошибке..."
	python run_tests_simple.py --failfast

# Дополнительные команды для качества кода
type-check:
	@echo "🔍 Проверка типов с mypy..."
	mypy src/

security-check:
	@echo "🔒 Проверка безопасности..."
	bandit -r src/ -f json -o bandit-report.json || bandit -r src/

pre-commit:
	@echo "🔧 Запуск pre-commit hooks..."
	pre-commit run --all-files

# Установка и настройка
setup-dev:
	@echo "⚙️ Настройка окружения разработки..."
	pre-commit install
	@echo "✅ Окружение настроено"

clean:
	@echo "🧹 Очистка временных файлов..."
	find . -type f -name "*.pyc" -delete
	find . -type d -name "__pycache__" -delete
	rm -rf *.log
	rm -rf htmlcov/
	rm -rf .coverage
	rm -rf coverage.xml
	rm -rf bandit-report.json
	rm -rf .pytest_cache/
	rm -rf .mypy_cache/
	rm -rf tests/__pycache__/
	rm -rf tests/apps/__pycache__/
	rm -rf tests/apps/user/__pycache__/
	@echo "✅ Очистка завершена"
