# Makefile — the single standard task-entry surface for this project.
#
# Every project using the template exposes the SAME targets, so CI, hooks,
# and humans all know one set of verbs regardless of the underlying stack.
# Each target delegates to scripts/ so the logic is shellcheck-able and
# runnable anywhere (the Makefile is pure dispatch).
#
# Targets:
#   make setup    install git hooks (idempotent)
#   make validate run the full rule audit
#   make fast     run the fast rule audit (pre-commit equivalent)
#   make lint     lint (shellcheck via docker)
#   make test     run the test suite  <-- override for your stack
#   make garden   doc-sprawl / Discourse-migration report
#   make up       bring up the docker-compose stack
#   make down     bring it down
#   make status   show repo status snapshot
#   make clean    remove build/test artifacts  <-- override for your stack
#
# Override `test` and `clean` per project; the rest are stable.

.PHONY: setup validate fast lint test garden up down status clean help

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

setup: ## Install git hooks
	@bash scripts/setup-hooks.sh

validate: ## Full rule audit (includes tests)
	@bash scripts/check-rules.sh

fast: ## Fast rule audit (pre-commit equivalent)
	@bash scripts/check-rules.sh --fast

lint: ## Lint shell scripts (shellcheck via docker)
	@docker run --rm -v "$$(pwd):/mnt" koalaman/shellcheck:stable \
		$$(find . -path ./.git -prune -o -path ./.tmp -prune -o -path ./vendor -prune -o -path ./node_modules -prune -o \( -name '*.sh' -o -name '*.bash' \) -print | sed 's|^\./|/mnt/|') || true

test: ## Run the test suite (override per project)
	@echo "make test: no test target defined yet — override this in your project's Makefile." >&2
	@exit 1

garden: ## Doc-sprawl / Discourse-migration report
	@bash scripts/garden.sh

up: ## Bring up the docker-compose stack
	@bash scripts/up.sh

down: ## Bring down the docker-compose stack
	@bash scripts/down.sh

status: ## Show a repo status snapshot
	@echo "== branch =="; git branch --show-current 2>/dev/null || echo "(no branch)"
	@echo "== last commit =="; git log --oneline -1 2>/dev/null || true
	@echo "== working tree =="; git status --short 2>/dev/null || echo "(not a git repo)"
	@echo "== STATUS.md head =="; sed -n '1,12p' STATUS.md 2>/dev/null || echo "(no STATUS.md)"

clean: ## Remove build/test artifacts (override per project)
	@echo "make clean: nothing to clean — override this in your project's Makefile."
