# MarkiTect - Advanced Markdown Engine
# Makefile for common development tasks

.PHONY: help setup install test build clean update status dev lint format check-deps venv-status

# Default target
help:
	@echo "MarkiTect Development Commands"
	@echo "=============================="
	@echo ""
	@echo "Environment Status:"
	@$(MAKE) --no-print-directory venv-status
	@echo ""
	@echo "Setup & Installation:"
	@echo "  setup       - Initial project setup (venv + install)"
	@echo "  install     - Install package in development mode"
	@echo "  dev         - Install with development dependencies"
	@echo "  venv-status - Check if venv is active"
	@echo ""
	@echo "Development:"
	@echo "  test        - Run all tests"
	@echo "  build       - Build the package"
	@echo "  lint        - Run code linting"
	@echo "  format      - Format code"
	@echo ""
	@echo "Maintenance:"
	@echo "  update      - Update from upstream (git + submodules)"
	@echo "  status      - Show git status for repo and submodules"
	@echo "  clean       - Clean build artifacts"
	@echo "  check-deps  - Check dependency status"

# Python and virtual environment setup
PYTHON := python3
VENV := .venv
VENV_PYTHON := $(VENV)/bin/python
VENV_PIP := $(VENV)/bin/pip

# Check virtual environment status (read-only)
venv-status:
	@if [ -f $(VENV)/bin/activate ] && [ -f $(VENV)/bin/python ]; then \
		if [ -n "$$VIRTUAL_ENV" ] && [ "$$VIRTUAL_ENV" = "$$(realpath $(VENV))" ]; then \
			echo "  ✅ Virtual environment: Active in current shell"; \
		elif [ -n "$$VIRTUAL_ENV" ]; then \
			echo "  ⚠️  Virtual environment: Different venv active ($$VIRTUAL_ENV)"; \
			echo "     Run 'deactivate' then 'source $(VENV)/bin/activate'"; \
		else \
			echo "  📁 Virtual environment: Ready but not activated"; \
			echo "     Run 'source $(VENV)/bin/activate' to activate"; \
		fi; \
	else \
		echo "  ❌ Virtual environment: Not found"; \
		echo "     Run 'make setup' to create and configure"; \
	fi

# Setup virtual environment and install package
setup: $(VENV)/bin/activate install
	@echo "✅ Project setup complete!"

$(VENV)/bin/activate:
	@echo "🔧 Creating virtual environment..."
	$(PYTHON) -m venv $(VENV)
	$(VENV_PIP) install --upgrade pip setuptools wheel

# Install package in development mode
install: $(VENV)/bin/activate
	@echo "📦 Installing MarkiTect in development mode..."
	$(VENV_PIP) install -e .

# Install with development dependencies
dev: install
	@echo "🛠️  Installing development dependencies..."
	$(VENV_PIP) install pytest pytest-cov black flake8 mypy

# Run tests
test: $(VENV)/bin/activate
	@echo "🧪 Running tests..."
	@if [ -f $(VENV)/bin/pytest ]; then \
		$(VENV)/bin/pytest tests/ -v; \
	else \
		$(VENV_PYTHON) -m pytest tests/ -v 2>/dev/null || \
		$(VENV_PYTHON) -m unittest discover tests/ -v; \
	fi

# Build the package
build: $(VENV)/bin/activate
	@echo "🏗️  Building package..."
	$(VENV_PYTHON) -m build 2>/dev/null || \
	$(VENV_PIP) install build && $(VENV_PYTHON) -m build

# Code linting
lint: $(VENV)/bin/activate
	@echo "🔍 Running linting..."
	@if [ -f $(VENV)/bin/flake8 ]; then \
		$(VENV)/bin/flake8 markitect/ tests/; \
	else \
		echo "⚠️  flake8 not installed. Run 'make dev' first."; \
	fi

# Code formatting
format: $(VENV)/bin/activate
	@echo "✨ Formatting code..."
	@if [ -f $(VENV)/bin/black ]; then \
		$(VENV)/bin/black markitect/ tests/; \
	else \
		echo "⚠️  black not installed. Run 'make dev' first."; \
	fi

# Update from upstream
update:
	@echo "🔄 Updating from upstream..."
	@git status --porcelain | grep -q . && echo "⚠️  Working directory not clean. Commit or stash changes first." && exit 1 || true
	git pull origin main
	git submodule update --remote
	@if git status --porcelain | grep -q "wiki"; then \
		echo "📝 Committing wiki submodule update..."; \
		git add wiki; \
		git commit -m "Update wiki submodule to latest"; \
	fi
	@echo "✅ Update complete!"

# Show git status
status:
	@echo "📊 Repository Status"
	@echo "==================="
	@echo ""
	@echo "Main Repository:"
	git status --short
	@echo ""
	@echo "Wiki Submodule:"
	@cd wiki && git status --short
	@echo ""
	@echo "Recent Commits:"
	git log --oneline -5

# Clean build artifacts
clean:
	@echo "🧹 Cleaning build artifacts..."
	rm -rf build/
	rm -rf dist/
	rm -rf *.egg-info/
	find . -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true
	find . -name "*.pyc" -delete 2>/dev/null || true
	@echo "✅ Clean complete!"

# Check dependency status
check-deps: $(VENV)/bin/activate
	@echo "📋 Dependency Status"
	@echo "==================="
	@echo ""
	@echo "Python version:"
	$(VENV_PYTHON) --version
	@echo ""
	@echo "Installed packages:"
	$(VENV_PIP) list
	@echo ""
	@echo "Project dependencies:"
	$(VENV_PIP) check
