NAS := luxick@192.168.3.3

COMPANION_WIN := companion/datascape-companion-windows-amd64.exe
COMPANION_LIN := companion/datascape-companion-linux-amd64
COMPANION_SRCS := $(wildcard cmd/companion/*.go) $(wildcard cmd/companion/*.html) go.mod go.sum

EDITOR_BUNDLE := assets/editor/vendor/codemirror.bundle.js
EDITOR_SRCS := $(wildcard editor-build/*.js) editor-build/package.json editor-build/package-lock.json

.PHONY: deploy companion companion-windows companion-linux companion-release editor

# Cross-compiled companion artifacts the wiki binary embeds. Both must exist
# before `go build .` so embed.FS picks them up.
companion-release: $(COMPANION_WIN) $(COMPANION_LIN)

$(COMPANION_WIN): $(COMPANION_SRCS)
	GOOS=windows GOARCH=amd64 go build -ldflags="-H windowsgui" -o $@ ./cmd/companion

$(COMPANION_LIN): $(COMPANION_SRCS)
	GOOS=linux GOARCH=amd64 go build -o $@ ./cmd/companion

companion-windows: $(COMPANION_WIN)
companion-linux: $(COMPANION_LIN)

# Local companion build for the host OS (handy for development).
companion:
	mkdir -p bin
	go build -o bin/ ./cmd/companion

# Regenerate the vendored CodeMirror bundle. One-time/dev-only step: run after
# upgrading the @codemirror/* versions in editor-build/package.json. The built
# artifact ($(EDITOR_BUNDLE)) is committed; `go build` only consumes it and
# never runs Node.
editor: $(EDITOR_BUNDLE)

$(EDITOR_BUNDLE): $(EDITOR_SRCS)
	cd editor-build && npm ci && npm run build

deploy: companion-release
	GOOS=linux GOARCH=arm GOARM=7 go build -o datascape-arm .
	ssh $(NAS) 'kill $$(cat /share/homes/luxick/.local/bin/datascape.pid) 2>/dev/null; rm -f /share/homes/luxick/.local/bin/datascape.pid'
	scp datascape-arm $(NAS):/share/homes/luxick/.local/bin/datascape
	ssh $(NAS) /share/homes/luxick/.local/bin/datascape-start.sh
	rm datascape-arm
