.PHONY: train test lint data-gen export format type-check install dev clean help

PYTHON ?= python
PYTEST ?= pytest
RUFF ?= ruff
MYPY ?= mypy

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

install: ## Install core dependencies
	pip install -e .

dev: ## Install all dependencies including dev tools
	pip install -e ".[train,dev]"
	pre-commit install
	pre-commit install --hook-type commit-msg

train: ## Run training (pass CONFIG=path/to/config.yaml)
	$(PYTHON) -m solver.training.train $(if $(CONFIG),--config-path $(CONFIG))

test: ## Run test suite
	$(PYTEST) tests/ freecad/tests/ -v --tb=short

lint: ## Run ruff linter
	$(RUFF) check solver/ freecad/ tests/ scripts/

format: ## Format code with ruff
	$(RUFF) format solver/ freecad/ tests/ scripts/
	$(RUFF) check --fix solver/ freecad/ tests/ scripts/

type-check: ## Run mypy type checker
	$(MYPY) solver/ freecad/

data-gen: ## Generate synthetic dataset (pass CONFIG=path/to/config.yaml)
	$(PYTHON) scripts/generate_synthetic.py $(if $(CONFIG),--config-path $(CONFIG))

export: ## Export trained model for deployment
	$(PYTHON) export/package_model.py $(if $(MODEL),--model $(MODEL))

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

check: lint type-check test ## Run all checks (lint, type-check, test)
