# EdgeGuard — Build-System.
# Cross-Compile für Debian 13 + Ubuntu 24.04 auf amd64 und arm64.
# CGO_ENABLED=0 (statische Binaries, keine libre2-/CGO-Abhängigkeit in v1).

GO       ?= $(shell which go || echo /usr/local/go/bin/go)
MODULE   := git.netcell-it.de/projekte/edgeguard-native
BINARIES := edgeguard-api edgeguard-scheduler edgeguard-ctl
VERSION  := $(shell cat VERSION 2>/dev/null || echo 0.0.1-dev)
LDFLAGS  := -s -w -X main.version=$(VERSION)
GOFLAGS  := -trimpath -mod=readonly
export CGO_ENABLED ?= 0

.PHONY: all help build test lint tidy clean ui \
        build-linux-amd64 build-linux-arm64 \
        deb deb-amd64 deb-arm64 \
        publish publish-amd64 publish-arm64

all: build

help:
	@echo "EdgeGuard build targets:"
	@echo "  build              Build all binaries for the host architecture (build/host/)"
	@echo "  build-linux-amd64  Cross-compile all binaries for linux/amd64 (build/amd64/)"
	@echo "  build-linux-arm64  Cross-compile all binaries for linux/arm64 (build/arm64/)"
	@echo "  test               go test ./..."
	@echo "  lint               go vet + staticcheck (if installed)"
	@echo "  tidy               go mod tidy"
	@echo "  ui                 Build management-ui (vite)"
	@echo "  deb-amd64          Cross-compile + build edgeguard_<ver>_amd64.deb"
	@echo "  deb-arm64          Cross-compile + build edgeguard_<ver>_arm64.deb"
	@echo "  deb                Build both amd64 and arm64 .deb packages"
	@echo "  publish-amd64      Build amd64 deb AND upload to Gitea"
	@echo "  publish-arm64      Same for arm64"
	@echo "  publish            publish-amd64 + publish-arm64"
	@echo "  clean              Remove build artifacts"

build:
	@mkdir -p build/host
	@for bin in $(BINARIES); do \
	    echo "  -> build/host/$$bin"; \
	    $(GO) build $(GOFLAGS) -ldflags '$(LDFLAGS)' \
	        -o build/host/$$bin ./cmd/$$bin || exit 1; \
	done

build-linux-amd64:
	@mkdir -p build/amd64
	@for bin in $(BINARIES); do \
	    echo "  -> build/amd64/$$bin"; \
	    GOOS=linux GOARCH=amd64 $(GO) build $(GOFLAGS) -ldflags '$(LDFLAGS)' \
	        -o build/amd64/$$bin ./cmd/$$bin || exit 1; \
	done

build-linux-arm64:
	@mkdir -p build/arm64
	@for bin in $(BINARIES); do \
	    echo "  -> build/arm64/$$bin"; \
	    GOOS=linux GOARCH=arm64 $(GO) build $(GOFLAGS) -ldflags '$(LDFLAGS)' \
	        -o build/arm64/$$bin ./cmd/$$bin || exit 1; \
	done

test:
	$(GO) test $(GOFLAGS) ./...

lint:
	$(GO) vet ./...
	@command -v staticcheck >/dev/null && staticcheck ./... || echo "staticcheck not installed, skipping"

tidy:
	$(GO) mod tidy

ui:
	@echo "  -> management-ui (vite build, version $(VERSION))"
	@cd management-ui && \
	    if [ -x "$$(command -v bun)" ]; then bun install --silent && bun run build; \
	    else npm install --silent && npm run build; fi

deb-amd64: build-linux-amd64 ui
	@./scripts/apt-repo/build-package.sh amd64 $(VERSION)

deb-arm64: build-linux-arm64 ui
	@./scripts/apt-repo/build-package.sh arm64 $(VERSION)

deb: deb-amd64 deb-arm64

GITEA_DEB_URL := https://git.netcell-it.de/api/packages/projekte/debian/pool/trixie/main/upload

publish-amd64: deb-amd64
	@TOK="$$(cat $$HOME/.gitea-token | tr -d '\n')"; \
	if [ -z "$$TOK" ]; then echo "publish: ~/.gitea-token is empty"; exit 1; fi; \
	echo "  -> publish edgeguard-api_$(VERSION)_amd64.deb"; \
	curl -sS -H "Authorization: token $$TOK" \
	    --upload-file build/deb/edgeguard-api_$(VERSION)_amd64.deb \
	    $(GITEA_DEB_URL)

publish-arm64: deb-arm64
	@TOK="$$(cat $$HOME/.gitea-token | tr -d '\n')"; \
	if [ -z "$$TOK" ]; then echo "publish: ~/.gitea-token is empty"; exit 1; fi; \
	echo "  -> publish edgeguard-api_$(VERSION)_arm64.deb"; \
	curl -sS -H "Authorization: token $$TOK" \
	    --upload-file build/deb/edgeguard-api_$(VERSION)_arm64.deb \
	    $(GITEA_DEB_URL)

publish: publish-amd64 publish-arm64

clean:
	rm -rf build/
