KVCS_EFC_DIR ?= ../../kvcs-efc
KVCS_C_DIR   ?= ../C
PKG_CONFIG_PATH := $(abspath $(KVCS_C_DIR)):$(PKG_CONFIG_PATH)
PATH := $(HOME)/.cargo/bin:$(PATH)
export PKG_CONFIG_PATH PATH
EFC_BUILD_DIR := $(abspath $(KVCS_EFC_DIR)/build)

.PHONY: build unittest coverage e2e clean help

build: ## Compile the crate (pkg-config resolves libkvcs paths)
	cargo build

unittest: ## Run ALL unit tests with mock library (dynamic link so mock swaps in)
	KVCS_DYNAMIC=1 LD_LIBRARY_PATH=$(EFC_BUILD_DIR) cargo test

coverage: ## Run ALL unit tests with mock library, produce cobertura + junit
	@KVCS_DYNAMIC=1 LD_LIBRARY_PATH=$(EFC_BUILD_DIR) \
		cargo llvm-cov nextest --profile ci --cobertura --output-path coverage.xml
	@python3 fix_coverage.py

E2E_BINARY  ?= target/debug/e2e_test
E2E_COMPOSE ?= ../../kvcs-test/runtimes/data-plane-e2e/docker-compose.yaml

e2e: $(E2E_BINARY) ## Build E2E binary, run inside EFC container (volume-mounted)
	docker compose -f $(E2E_COMPOSE) exec kvcs-efc-1 \
		/kvcs-efc-rt/kvcs-sdk/rust/$(E2E_BINARY) --test-threads=1

kvcs_e2e_test: $(E2E_BINARY) ## Alias for CI

$(E2E_BINARY): $(wildcard src/*.rs tests/e2e_test/*.rs)
	rm -f target/debug/deps/e2e_test-*
	cargo test --features e2e --no-run
	find target/debug/deps -name 'e2e_test-*' -executable -type f | head -1 | xargs -I{} cp {} $@

clean: ## Clean build artifacts
	cargo clean

help: ## Show this help
	@grep -E '^[a-z].*:.*##' $(MAKEFILE_LIST) | sed 's/:.*## /\t/' | sort
