# pansy — one static binary: Go API + embedded React build.
#
#   make build   # production binary ./pansy with the web build embedded
#   make dev     # Go API (:8080) + Vite dev (:5173) together, hot reload
#   make test    # go test + web tests
#
# pansy is a standalone module; GOWORK=off keeps the parent workspace out of the
# way, and CGO_ENABLED=0 keeps the binary static (pure-Go SQLite driver).

BINARY  := pansy
WEBDIST := internal/webdist/dist
GO_ENV  := CGO_ENABLED=0 GOWORK=off

.PHONY: all build web dev dev-api dev-web test clean

all: build

## build: bundle the frontend and compile the single static binary.
build: web
	$(GO_ENV) go build -o $(BINARY) ./cmd/pansy
	@echo "built ./$(BINARY)"

## web: produce the production web bundle and sync it into the embed directory.
web:
	cd web && npm ci && npm run build
	rm -rf $(WEBDIST)
	cp -r web/dist $(WEBDIST)

## dev: run the API and Vite dev server together (Ctrl-C stops both).
## Prefer two terminals if you want independent restarts:
##   term 1: make dev-api    term 2: make dev-web
dev:
	@echo "API on :8080, Vite on :5173 (proxies /api → :8080). Ctrl-C stops both."
	@$(MAKE) -j2 dev-api dev-web

dev-api:
	$(GO_ENV) go run ./cmd/pansy

dev-web:
	cd web && npm run dev

## test: run backend and (if present) frontend tests.
test:
	$(GO_ENV) go test ./...
	cd web && npm test --if-present

## clean: remove the binary and the generated embed contents (restore placeholder).
clean:
	rm -f $(BINARY)
	rm -rf $(WEBDIST)
	git checkout -- $(WEBDIST)/index.html 2>/dev/null || true
