.PHONY: all build build-cni build-daemon test lint proto-gen yang-validate \
       container-build dev dev-build dev-exec clean

CONTAINER_ENGINE ?= podman
COMPOSE ?= $(CONTAINER_ENGINE)-compose
DEV_CONTAINER := kedge-dev

CNI_BINARY := bin/kedge-cni
DAEMON_BINARY := bin/kedge-daemon

# ---------- Container-based builds (default) ----------

all: container-build

container-build:
	$(CONTAINER_ENGINE) build --target cni -t kedge-cni -f Containerfile.build .
	$(CONTAINER_ENGINE) build --target daemon -t kedge-daemon -f Containerfile.build .

# ---------- Dev environment (podman-compose) ----------

dev-build:
	$(COMPOSE) build

dev:
	$(COMPOSE) up -d dev

dev-exec:
	$(COMPOSE) exec dev bash

dev-down:
	$(COMPOSE) down

# ---------- In-container Go commands (via dev container) ----------

build: build-cni build-daemon

build-cni:
	$(COMPOSE) exec dev go build -o $(CNI_BINARY) ./cmd/kedge-cni

build-daemon:
	$(COMPOSE) exec dev go build -o $(DAEMON_BINARY) ./cmd/kedge-daemon

test:
	$(COMPOSE) exec dev go test ./...

lint:
	$(COMPOSE) exec dev golangci-lint run ./...

proto-gen:
	$(COMPOSE) exec dev buf generate

mod-tidy:
	$(COMPOSE) exec dev go mod tidy

# ---------- YANG / Python ----------

yang-validate:
	$(COMPOSE) exec yang-compiler pyang --strict models/sovereign-sdwan.yang

python-test:
	$(COMPOSE) exec yang-compiler python -m pytest tests/

# ---------- Local (if Go is installed) ----------

build-local:
	go build -o $(CNI_BINARY) ./cmd/kedge-cni
	go build -o $(DAEMON_BINARY) ./cmd/kedge-daemon

test-local:
	go test ./...

# ---------- Clean ----------

clean:
	rm -rf bin/
	$(COMPOSE) down -v 2>/dev/null || true
