# ----------------------------------------------------------------------------
# Switchboard — developer Makefile
# ----------------------------------------------------------------------------
# All targets are thin wrappers over `uv`. The aliases here match what
# .github/workflows/ci.yml runs, so "green locally" maps 1:1 to "green in CI".
#
# Quick start:
#   make install          # uv sync --extra dev --locked
#   make check            # pre-commit + test + build (CI parity)
#
# Run `make help` to list everything.
# ----------------------------------------------------------------------------

UV ?= uv
RUFF_ARGS ?=
MYPY_TARGETS ?= src

.DEFAULT_GOAL := help

# --- meta -------------------------------------------------------------------

.PHONY: help
help: ## Show this help message
	@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z0-9_-]+:.*?## / {printf "  \033[36m%-16s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)

# --- environment ------------------------------------------------------------

.PHONY: install
install: ## Sync the dev virtualenv (matches CI: lock must match pyproject)
	$(UV) sync --locked

.PHONY: lock
lock: ## Refresh uv.lock from pyproject.toml
	$(UV) lock

.PHONY: lock-upgrade
lock-upgrade: ## Refresh uv.lock and upgrade pinned versions
	$(UV) lock --upgrade

# --- quality ----------------------------------------------------------------

.PHONY: pre-commit
pre-commit: ## Run all pre-commit hooks (matches CI)
	$(UV) run pre-commit run --all-files

.PHONY: lint
lint: ## Run ruff lint
	$(UV) run ruff check $(RUFF_ARGS)

.PHONY: format
format: ## Apply ruff formatter
	$(UV) run ruff format $(RUFF_ARGS)

.PHONY: format-check
format-check: ## Verify formatting without writing changes
	$(UV) run ruff format --check $(RUFF_ARGS)

.PHONY: typecheck
typecheck: ## Run mypy in strict mode
	$(UV) run mypy $(MYPY_TARGETS)

# --- tests ------------------------------------------------------------------

.PHONY: test
test: ## Run the full pytest suite
	$(UV) run pytest -q $(PYTEST_ARGS)

# --- packaging --------------------------------------------------------------

.PHONY: build
build: ## Build wheel + sdist into ./dist via uv build
	$(UV) build

# --- meta workflows ---------------------------------------------------------

.PHONY: check
check: pre-commit test build ## Run the full CI-equivalent gate

.PHONY: clean
clean: ## Remove build artifacts and cache directories
	rm -rf build/ dist/ *.egg-info src/*.egg-info \
	       .pytest_cache .ruff_cache .mypy_cache \
	       .coverage .coverage.* htmlcov coverage.xml
	find . -type d -name __pycache__ -prune -exec rm -rf {} +
