# Convenience only. `go build`, `go test` and ./scripts/verify.sh are the ground truth — nothing here
# is required to work on khosra, and the gate never invokes make.

SITE ?= $(KHOSRA_SITE)
ADDR ?= localhost:8080
BIN  := ./khosra

.PHONY: help build run check new demo test verify fmt tidy clean

help: ## list targets
	@grep -hE '^[a-z]+:.*##' $(MAKEFILE_LIST) | sed 's/:[^#]*## /|/' | column -t -s '|'

build: ## compile the binary
	go build -o $(BIN) ./cmd/khosra

run: build ## serve a site root: make run SITE=/path/to/site
	@test -n "$(SITE)" || { echo "set SITE=/path/to/site, or export KHOSRA_SITE"; exit 1; }
	$(BIN) -site "$(SITE)" -addr "$(ADDR)"

check: build ## validate a site root's content: make check SITE=/path/to/site
	@test -n "$(SITE)" || { echo "set SITE=/path/to/site, or export KHOSRA_SITE"; exit 1; }
	$(BIN) check -site "$(SITE)"

new: build ## scaffold a bundle: make new KEY=posts/hello-world SITE=/path/to/site
	@test -n "$(SITE)" || { echo "set SITE=/path/to/site, or export KHOSRA_SITE"; exit 1; }
	@test -n "$(KEY)" || { echo "set KEY=posts/hello-world"; exit 1; }
	$(BIN) new -site "$(SITE)" "$(KEY)"

demo: build ## write a demo site that exercises every feature: make demo SITE=/tmp/khosra-demo
	@test -n "$(SITE)" || { echo "set SITE=/path/to/empty/dir"; exit 1; }
	@mkdir -p "$(SITE)"
	$(BIN) demo -site "$(SITE)"

test: ## run tests with the race detector
	go test -race ./...

verify: ## everything the harness enforces; must be green before a commit
	./scripts/verify.sh

fmt: ## format all Go source
	gofmt -w .

tidy: ## tidy go.mod
	go mod tidy

clean: ## remove build output
	rm -f $(BIN)
