IMAGE ?= compass-teams-nhs/school:0.1.0-phase1
BUILD_VERSION ?= 0.1.0-phase1

# Bounded docker helper for the Go toolchain. The container runs as the current
# user, so the repository and the module cache stay owned by you.
GO_IMAGE ?= golang:1.25-alpine
GO_RUN = timeout 600 docker run --rm --network host --user "$$(id -u):$$(id -g)" \
	  -e HOME=/src/.gocache -e GOMODCACHE=/src/.gocache/mod -e GOCACHE=/src/.gocache/build \
	  -v "$$PWD":/src -w /src $(GO_IMAGE)

.PHONY: help test vet build up down restart logs ps deps fmt hash-password gen-secret verify-phase1

help:
	@echo "make test           run go test ./... in golang:1.25-alpine"
	@echo "make vet            run go vet ./... in golang:1.25-alpine"
	@echo "make build          build the container image ($(IMAGE))"
	@echo "make up             docker compose up -d --build"
	@echo "make down           docker compose down"
	@echo "make logs           follow container logs"
	@echo "make ps             docker compose ps"
	@echo "make deps           go mod tidy + download (writes go.mod/go.sum)"
	@echo "make hash-password  generate a bcrypt hash (PASSWORD=...)"
	@echo "make gen-secret     print a fresh session secret"
	@echo "make verify-phase1  prove /health, the login and the Caddy route"

test:
	$(GO_RUN) go test ./...

vet:
	$(GO_RUN) go vet ./...

deps:
	$(GO_RUN) sh -c 'go mod tidy'

fmt:
	$(GO_RUN) sh -c 'go fmt ./...'

build:
	docker build --build-arg VERSION=$(BUILD_VERSION) -t $(IMAGE) .

up:
	docker compose up -d --build

down:
	docker compose down

restart:
	docker compose restart school

logs:
	docker compose logs -f school

ps:
	docker compose ps

hash-password:
	@test -n "$(PASSWORD)" || (echo "usage: make hash-password PASSWORD=secret"; exit 2)
	docker run --rm --entrypoint /app/school $(IMAGE) hash-password '$(PASSWORD)'

gen-secret:
	docker run --rm --entrypoint /app/school $(IMAGE) gen-secret

# Phase 1 definition of done: /health 200, login page + session login, and the
# Caddy route on .35.
verify-phase1:
	deploy/verify-phase1.sh
