# Blite Tracing Makefile
# Simple build, test, and publish automation

.PHONY: help clean build test format install publish version-patch version-minor version-major release

# Default target
.DEFAULT_GOAL := help

help: ## Show available commands
	@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "  %-15s %s\n", $$1, $$2}'

install: ## Install package dependencies
	uv sync

test: ## Run tests
	uv run pytest -s

format: ## Format code with ruff
	uv run ruff format src/

check: ## Run linting checks
	uv run ruff check src/

clean: ## Clean build artifacts
	rm -rf dist/ build/ *.egg-info/ .ruff_cache
	find . -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true
	find . -type f -name "*.pyc" -delete

build: clean ## Build the package
	uv build
	@ls -la dist/

publish: ## Publish to PyPI
	@if [ ! -d "dist/" ] || [ -z "$$(ls -A dist/ 2>/dev/null)" ]; then \
		echo "❌ No build artifacts found. Run 'make build' first."; \
		exit 1; \
	fi
	@echo "Publishing version: $$(grep '^version = ' pyproject.toml | cut -d'"' -f2)"; \
	echo "Type 'publish' to confirm publishing to PyPI, or anything else to cancel:"; \
	read -p "> " confirm; \
	if [ "$$confirm" = "publish" ]; then \
		uv publish; \
	else \
		echo "❌ Publish cancelled. You typed: '$$confirm'"; \
		exit 1; \
	fi

version-patch: ## Bump patch version (0.1.0 -> 0.1.1)
	@CURRENT_VERSION=$$(grep '^version = ' pyproject.toml | cut -d'"' -f2); \
	NEW_VERSION=$$(python3 -c "import sys; v=sys.argv[1].split('.'); v[2]=str(int(v[2])+1); print('.'.join(v))" $$CURRENT_VERSION); \
	sed -i '' "s/version = \".*\"/version = \"$$NEW_VERSION\"/" pyproject.toml; \
	sed -i '' "s/__version__ = \".*\"/__version__ = \"$$NEW_VERSION\"/" src/blite_tracing/__init__.py; \
	echo "Version updated to: $$NEW_VERSION"

version-minor: ## Bump minor version (0.1.0 -> 0.2.0)
	@CURRENT_VERSION=$$(grep '^version = ' pyproject.toml | cut -d'"' -f2); \
	NEW_VERSION=$$(python3 -c "import sys; v=sys.argv[1].split('.'); v[1]=str(int(v[1])+1); v[2]='0'; print('.'.join(v))" $$CURRENT_VERSION); \
	sed -i '' "s/version = \".*\"/version = \"$$NEW_VERSION\"/" pyproject.toml; \
	sed -i '' "s/__version__ = \".*\"/__version__ = \"$$NEW_VERSION\"/" src/blite_tracing/__init__.py; \
	echo "Version updated to: $$NEW_VERSION"

version-major: ## Bump major version (0.1.0 -> 1.0.0)
	@CURRENT_VERSION=$$(grep '^version = ' pyproject.toml | cut -d'"' -f2); \
	NEW_VERSION=$$(python3 -c "import sys; v=sys.argv[1].split('.'); v[0]=str(int(v[0])+1); v[1]='0'; v[2]='0'; print('.'.join(v))" $$CURRENT_VERSION); \
	sed -i '' "s/version = \".*\"/version = \"$$NEW_VERSION\"/" pyproject.toml; \
	sed -i '' "s/__version__ = \".*\"/__version__ = \"$$NEW_VERSION\"/" src/blite_tracing/__init__.py; \
	echo "Version updated to: $$NEW_VERSION"

release: ## Complete release workflow: format → build → publish
	@echo "🚀 Starting release workflow..."
	@echo "Current version: $$(grep '^version = ' pyproject.toml | cut -d'"' -f2)"
	@echo "Choose version bump:"
	@echo "  1) Patch (bug fixes)"
	@echo "  2) Minor (new features)"
	@echo "  3) Major (breaking changes)"
	@echo "  4) Skip version bump"
	@read -p "Enter choice (1-4): " choice; \
	case $$choice in \
		1) make version-patch ;; \
		2) make version-minor ;; \
		3) make version-major ;; \
		4) echo "Skipping version bump..." ;; \
		*) echo "Invalid choice, exiting..." && exit 1 ;; \
	esac
	@echo "📦 New version: $$(grep '^version = ' pyproject.toml | cut -d'"' -f2)"
	@echo "🎨 Formatting code..."
	@make format
	@echo "🔨 Building package..."
	@make build
	@echo "📤 Publishing to PyPI..."
	@make publish
	@echo "✅ Release complete!"
