IMAGE ?= compass-teams-nhs/school:0.6.0-phase8
BUILD_VERSION ?= 0.6.0-phase8

# Parse options (see scripts/parse-compass.sh).
CHILD ?= Harry
RUN ?= latest
CLASSIFY ?= auto

# Scan target: 'all' scans every child; set SCAN_CHILD=Harry to narrow it.
SCAN_CHILD ?= all

# Notify options (see scripts/morning-brief.sh and school notify run).
NOTIFY_ARGS ?=

# 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 verify-phase8 parse scan calendar notify morning-brief n8n-key n8n-import

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 parse          parse stored Compass pages into SQLite (Phase 3)"
	@echo "make scan           fetch + parse one or both children (Phase 4; SCAN_CHILD=Harry|Finn|all)"
	@echo "make calendar       push important events to the HA calendar (Phase 6; CALENDAR_ARGS=...)"
	@echo "make notify         build and send the morning briefs via Apprise (Phase 7; NOTIFY_ARGS=...)"
	@echo "make preview        print the briefs without sending (Phase 7)"
	@echo "make morning-brief  scan both children, then send the briefs (the n8n job)"
	@echo "make n8n-key        print the restricted SSH trigger key plan (Phase 7a)"
	@echo "make n8n-import     print the n8n import/publish plan (Phase 7a; APPLY=1 applies)"
	@echo "make verify-phase1  prove /health, the login and the Caddy route"
	@echo "make verify-phase8  prove the Hub API: /capabilities, /ask, /notify (--send delivers)"

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 3: parse the stored raw pages for one child into the items table.
parse:
	CHILD=$(CHILD) RUN=$(RUN) CLASSIFY=$(CLASSIFY) IMAGE=$(IMAGE) scripts/parse-compass.sh

# Phase 4: fetch + parse one child or both, with a per-child session.
scan:
	CLASSIFY=$(CLASSIFY) IMAGE=$(IMAGE) scripts/scan-compass.sh $(if $(filter-out all,$(SCAN_CHILD)),--child $(SCAN_CHILD))

# Phase 6: Home Assistant calendar. CALENDAR_ARGS defaults to 'status'.
calendar:
	IMAGE=$(IMAGE) scripts/calendar-push.sh $(if $(CALENDAR_ARGS),$(CALENDAR_ARGS),status)

# Phase 7: send the morning briefs through Apprise (FR-9, FR-14).
notify:
	IMAGE=$(IMAGE) scripts/morning-brief.sh --no-scan $(NOTIFY_ARGS)

# Phase 7: print the briefs and send nothing.
preview:
	IMAGE=$(IMAGE) scripts/morning-brief.sh --no-scan --dry-run

# Phase 7: the job the 6:00am n8n schedule calls — scan, then send.
morning-brief:
	IMAGE=$(IMAGE) scripts/morning-brief.sh

# Phase 7a: the 06:00 n8n schedule. Both default to a dry run; pass APPLY=1 to
# change the shared n8n service on .13 (after approval).
n8n-key:
	deploy/setup-n8n-scan-key.sh $(if $(APPLY),--apply,)

n8n-import:
	deploy/import-n8n-morning-brief.sh $(if $(APPLY),--apply,)

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

# Phase 8 definition of done: the Hub API answers and authenticates. Pass
# ARGS=--send to deliver one real /notify message to Sam.
verify-phase8:
	deploy/verify-phase8.sh $(ARGS)
