EXTENSION_ID := leoustc.agent-runner
VERSION := $(shell tr -d '[:space:]' < VERSION)
VSIX := build/agent-runner-$(VERSION).vsix
TAG := v$(VERSION)
PI_VERSION := 0.80.6

.PHONY: help install build watch vendor-pi prune-vendor-pi package install-extension reinstall release clean

help:
	@printf "Targets:\n"
	@printf "  make install            Install npm dependencies\n"
	@printf "  make build              Compile the extension\n"
	@printf "  make watch              Compile in watch mode\n"
	@printf "  make vendor-pi          Install packaged Pi runtime\n"
	@printf "  make prune-vendor-pi    Remove non-runtime Pi package files\n"
	@printf "  make package            Build $(VSIX)\n"
	@printf "  make install-extension  Package and install into VS Code\n"
	@printf "  make reinstall          Package and reinstall into code-server\n"
	@printf "  make release            Build, commit release $(TAG), tag, and push\n"
	@printf "  make clean              Remove build artifacts\n"

install:
	npm install

build:
	npm run compile

watch:
	npm run watch

vendor-pi:
	@node -e "const v=process.versions.node.split('.').map(Number); if (v[0] < 22 || (v[0] === 22 && (v[1] < 19 || (v[1] === 19 && v[2] < 0)))) { console.error('Node >=22.19.0 is required to package Agent Runner Pi runtime. Current: ' + process.version); process.exit(1); }"
	npm install --prefix vendor/pi --omit=dev --ignore-scripts @earendil-works/pi-coding-agent@$(PI_VERSION)

prune-vendor-pi: vendor-pi
	node scripts/prune-vendor-pi.js vendor/pi

package: build prune-vendor-pi
	npm run package

install-extension: package
	code --install-extension $(VSIX)

reinstall: package
	code-server --uninstall-extension $(EXTENSION_ID) || true
	code-server --install-extension $(VSIX) --force

release: package
	@test -n "$(VERSION)" || (printf "VERSION file is empty\n" >&2; exit 1)
	@! git rev-parse "$(TAG)" >/dev/null 2>&1 || (printf "Tag $(TAG) already exists locally.\n" >&2; exit 1)
	@! git ls-remote --exit-code --tags origin "$(TAG)" >/dev/null 2>&1 || (printf "Tag $(TAG) already exists on origin.\n" >&2; exit 1)
	git add -A
	@git diff --cached --quiet && (printf "No changes staged for release $(TAG).\n" >&2; exit 1) || true
	git commit -m "Release $(TAG)"
	git tag -a "$(TAG)" -m "Release $(TAG)"
	git push origin HEAD
	git push origin "$(TAG)"

clean:
	rm -rf out build agent-runner-*.vsix agent-runner.vsix

save:
	git add -A
	git commit -m "a"
	git push -f
