# tenant-registry — Go service for tenant glue, audit, API keys.

.PHONY: help dev test test-short build build-migrate fmt vet lint docker clean \
        migrate-up migrate-down migrate-down-all migrate-version migrate-create

ADDR        ?= :8090
APP_ENV     ?= dev
DATABASE_URL ?= postgres://platform:platform-dev-pass@localhost:5432/platform?sslmode=disable

help:
	@echo "tenant-registry targets:"
	@echo ""
	@echo "  Server:"
	@echo "    make dev               go run ./cmd/server (foreground, APP_ENV=dev)"
	@echo "    make build             compile to ./bin/tenant-registry"
	@echo "    make build-migrate     compile to ./bin/migrate"
	@echo "    make docker            build local image (tenant-registry:dev)"
	@echo ""
	@echo "  Schema:"
	@echo "    make migrate-up        apply all pending migrations (uses DATABASE_URL)"
	@echo "    make migrate-down      roll back the most recent migration"
	@echo "    make migrate-down-all  roll back EVERY migration (DESTRUCTIVE)"
	@echo "    make migrate-version   print current schema version"
	@echo "    make migrate-create NAME=add_foo"
	@echo "                           create a new pair of empty migration files"
	@echo ""
	@echo "  CI:"
	@echo "    make test              go test -race ./...   (includes testcontainers)"
	@echo "    make test-short        go test -race -short ./...   (skips integration)"
	@echo "    make fmt | vet | lint"

dev:
	@APP_ENV=$(APP_ENV) ADDR=$(ADDR) go run ./cmd/server

test:
	@go test -race ./...

test-short:
	@go test -race -short ./...

build:
	@mkdir -p bin
	@CGO_ENABLED=0 go build -o bin/tenant-registry ./cmd/server
	@echo "built ./bin/tenant-registry"

build-migrate:
	@mkdir -p bin
	@CGO_ENABLED=0 go build -o bin/migrate ./cmd/migrate
	@echo "built ./bin/migrate"

fmt:
	@gofmt -w .
	@test -z "$$(gofmt -l .)"

vet:
	@go vet ./...

lint: fmt vet

docker:
	@docker build -t tenant-registry:dev .

clean:
	@rm -rf bin

# ─── migrations ────────────────────────────────────────────────────────────

migrate-up:
	@DATABASE_URL=$(DATABASE_URL) go run ./cmd/migrate up

migrate-down:
	@DATABASE_URL=$(DATABASE_URL) go run ./cmd/migrate down

migrate-down-all:
	@DATABASE_URL=$(DATABASE_URL) go run ./cmd/migrate -all down

migrate-version:
	@DATABASE_URL=$(DATABASE_URL) go run ./cmd/migrate version

migrate-create:
ifndef NAME
	$(error usage: make migrate-create NAME=add_something)
endif
	@n=$$(ls migrations/*.up.sql 2>/dev/null | wc -l); \
	next=$$(printf "%04d" $$((n + 1))); \
	touch migrations/$${next}_$(NAME).up.sql migrations/$${next}_$(NAME).down.sql; \
	echo "created migrations/$${next}_$(NAME).{up,down}.sql"
