.PHONY: service webui dev remotedev test build clean

export PATH := $(HOME)/.local/go/bin:$(PATH)

# Optional local overrides (gitignored): REMOTEDEV_USER, REMOTEDEV_HOST, etc.
-include remotedev.mk

REMOTEDEV_DIR ?= clustercanvas-remotedev
PORT ?= 8080
WEBUI_PORT ?= 5173
# Dev-only AES key for remotedev (base64 of 32 bytes). Override in remotedev.mk if needed.
# NOT for production.
REMOTEDEV_CONFIG_KEY ?= Q2x1c3RlckNhbnZhcy1yZW1vdGVkZXYta2V5ISEhISE=

# Build SSH target from prepared user+host, or use REMOTEDEV_HOST as-is (user@host / SSH alias).
ifneq ($(strip $(REMOTEDEV_USER)),)
REMOTEDEV_SSH := $(REMOTEDEV_USER)@$(REMOTEDEV_HOST)
else
REMOTEDEV_SSH := $(REMOTEDEV_HOST)
endif

service:
	cd service && go run ./cmd/server

webui:
	cd webui && npm run dev

# Run API (:8080) and web UI (:5173) together; Ctrl+C stops both.
# Export CLUSTERCANVAS_CONFIG_KEY in your shell (or remotedev.mk) before first-run setup.
dev:
	@trap 'kill 0' EXIT INT TERM; \
	(cd service && go run ./cmd/server) & \
	(cd webui && npm run dev) & \
	wait

# Build locally, copy binaries + SPA to a VM over SSH, run both there (no SDKs on remote).
# Prepare remotedev.mk with REMOTEDEV_USER + REMOTEDEV_HOST, or pass them on the CLI.
# Usage: make remotedev
#    or: REMOTEDEV_HOST=user@192.168.1.50 make remotedev
remotedev:
	@test -n "$(REMOTEDEV_HOST)" || (echo 'Set REMOTEDEV_HOST (and optional REMOTEDEV_USER) in remotedev.mk or on the CLI'; exit 1)
	mkdir -p bin
	cd service && go build -o ../bin/clustercanvas-server ./cmd/server
	cd service && go build -o ../bin/clustercanvas-webui ./cmd/webui
	cd webui && VITE_API_BASE_URL= npm run build
	# scp only needs OpenSSH on the remote (rsync is often missing on minimal VMs).
	# Leave ~ unquoted so the remote shell expands REMOTEDEV_DIR=~/... correctly.
	ssh "$(REMOTEDEV_SSH)" "mkdir -p $(REMOTEDEV_DIR)/web $(REMOTEDEV_DIR)/config"
	scp bin/clustercanvas-server bin/clustercanvas-webui "$(REMOTEDEV_SSH):$(REMOTEDEV_DIR)/"
	ssh "$(REMOTEDEV_SSH)" "rm -rf $(REMOTEDEV_DIR)/web && mkdir -p $(REMOTEDEV_DIR)/web"
	scp -r webui/dist/. "$(REMOTEDEV_SSH):$(REMOTEDEV_DIR)/web/"
	@echo "Starting on $(REMOTEDEV_SSH) — open http://<vm-ip>:$(WEBUI_PORT) (Ctrl+C stops both)"
	ssh -t "$(REMOTEDEV_SSH)" "cd $(REMOTEDEV_DIR) && \
		pkill -x clustercanvas-server >/dev/null 2>&1 || true; \
		pkill -x clustercanvas-webui >/dev/null 2>&1 || true; \
		trap 'kill 0' EXIT INT TERM; \
		export CLUSTERCANVAS_CONFIG_KEY='$(REMOTEDEV_CONFIG_KEY)'; \
		export CLUSTERCANVAS_CONFIG_DIR=\"\$$PWD/config\"; \
		PORT=$(PORT) ./clustercanvas-server -configdir=config & \
		WEBUI_PORT=$(WEBUI_PORT) API_URL=http://127.0.0.1:$(PORT) ./clustercanvas-webui -webdir=web -configdir=config & \
		wait"

test:
	cd service && go test ./...
	cd webui && npm test

build:
	mkdir -p bin
	cd service && go build -o ../bin/clustercanvas-server ./cmd/server
	cd service && go build -o ../bin/clustercanvas-webui ./cmd/webui
	cd webui && npm run build

clean:
	rm -rf bin service/coverage.out webui/dist webui/coverage
