.PHONY: build build-release frontend backend run migrate reconcile reconcile-delete tidy test clean

# Release version stamped into the binary (-X main.version). Override with VERSION=...
VERSION ?= $(shell git describe --tags --always --dirty 2>/dev/null || echo dev)

frontend:
	cd frontend && npm ci && npm run build
	rm -rf backend/static/*
	cp -r frontend/build/* backend/static/

backend:
	mkdir -p bin
	# -tags nodynamic forces gen2brain/webp to use its pure-Go transpiled path
	# (no purego/dlopen), keeping the binary fully static.
	cd backend && CGO_ENABLED=0 go build -tags nodynamic -trimpath -ldflags="-s -w" \
		-o ../bin/galo ./cmd/server

build: frontend backend

# Release build: full static, stripped and (if available) UPX-compressed binary
# with the version embedded. Produces bin/galo and a copy at bin/galo-$(VERSION).
build-release: frontend
	mkdir -p bin
	cd backend && CGO_ENABLED=0 go build -tags nodynamic -trimpath \
		-ldflags="-s -w -X main.version=$(VERSION)" -o ../bin/galo ./cmd/server
	strip --strip-all bin/galo
	@if command -v upx >/dev/null 2>&1; then \
		upx --best --quiet bin/galo && echo "upx: bin/galo compressed"; \
	else \
		echo "upx not found - skipping compression (install upx-ucl to enable)"; \
	fi
	cp bin/galo bin/galo-$(VERSION)
	@echo "release: bin/galo-$(VERSION)"

run: backend
	./bin/galo

migrate:
	cd backend && go run ./cmd/migrate

# Reconcile object storage against the metadata journal (report only).
reconcile:
	cd backend && go run ./cmd/reconcile

# Reconcile and delete orphaned blobs older than --min-age (default 1h).
# Override the grace period when needed: make reconcile-delete MIN_AGE=1m
reconcile-delete:
	cd backend && go run ./cmd/reconcile --delete $(if $(MIN_AGE),--min-age $(MIN_AGE),)

tidy:
	cd backend && go mod tidy

test:
	cd backend && go test ./...

clean:
	rm -rf bin backend/static/*
	touch backend/static/.gitkeep
