# api/Makefile — the Rust + axum backend API.
#
# Driven directly with `make -C api <target>` (or via the root Makefile's
# `api-*` convenience targets).

CARGO ?= cargo
ROOT  := ..

# Normalize API_ENV_FILE / API_DESI_DATA (given relative to the repo root) to
# absolute paths so the API process can open them regardless of its working
# directory. "override" is required because they are usually passed as
# command-line/env vars, which would otherwise override any assignment here.
define normalize_path
ifdef $1
ifneq ($(abspath $($1)),$($1))
override $1 := $(abspath $(ROOT)/$($1))
endif
endif
endef
$(foreach v,API_ENV_FILE API_DESI_DATA,$(eval $(call normalize_path,$v)))

.PHONY: help setup run build test check fmt clean

help: ## List available targets
	@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \
		awk 'BEGIN {FS = ":.*?## "}; {printf "  \033[36m%-18s\033[0m %s\n", $$1, $$2}'

setup: ## Fetch dependencies
	$(CARGO) fetch

run: ## Run the API server (dev)
	$(CARGO) run

build: ## Release build -> target/release/
	$(CARGO) build --release

test: ## Run unit/integration tests
	$(CARGO) test

check: ## Format-check + lint (clippy -D warnings)
	$(CARGO) fmt --all --check && $(CARGO) clippy --all-targets -- -D warnings

fmt: ## Format Rust sources with rustfmt
	$(CARGO) fmt

clean: ## Remove Cargo build artifacts
	$(CARGO) clean
