.PHONY: help
help: ## Display this help.
	@awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n  make \033[36m<target>\033[0m\n"} /^[a-zA-Z_0-9-]+:.*?##/ { printf "  \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST)

.PHONY: install-go
install-go: ## Install Go dependencies
	go mod download

.PHONY: install
install: install-go ## Install all dependencies
	pnpm --dir=web install --frozen-lockfile

.PHONY: generate-bpf
generate-bpf: ## Compile the heimdall eBPF program and regenerate Go bindings (uses pinned clang/Go in docker for bytewise reproducibility across hosts)
	@docker build --platform=linux/amd64 -q -t teral-bpf-gen -f svc/heimdall/internal/network/bpf/Dockerfile.gen svc/heimdall/internal/network/bpf >/dev/null
	@docker run --rm --platform=linux/amd64 -v "$$PWD:/work" -w /work teral-bpf-gen \
		go generate -tags bpf_generate ./svc/heimdall/internal/network/...

.PHONY: dev
dev: ## Start dev environment
	@ctlptl apply -f ./dev/cluster.yaml
	@minikube addons enable metrics-server
	@tilt up -f ./dev/Tiltfile

.PHONY: oci-load
oci-load: build ## Build and load OCI images into Docker
	bazel run //:oci_load_teral

.PHONY: local-dashboard
local-dashboard: install oci-load ## Run local development setup for dashboard
	pnpm --dir=web/apps/dashboard local

.PHONY: build
build:  ## Build all artifacts
	bazel build //...

.PHONY: down
down: ## Stop tilt (keeps cluster)
	@tilt down -f ./dev/Tiltfile

.PHONY: nuke
nuke: ## Delete minikube cluster entirely
	@minikube delete

.PHONY: fmt-yaml
fmt-yaml: ## Format YAML files
	dprint fmt --config dev/dprint.json

.PHONY: fmt
fmt: fmt-yaml ## Format code
	go fmt ./...
	go tool buf format -w

	cd web && pnpm fmt

.PHONY: teral
teral:
	@set -a; [ -f .env ] && . ./.env; set +a; bazel run --ui_event_filters=-info --noshow_progress //:teral -- $(filter-out teral,$(MAKECMDGOALS)) $(ARGS)

# Catch-all to swallow extra args passed to teral target (only when teral is called)
ifneq ($(filter teral,$(MAKECMDGOALS)),)
%:
	@:
endif
