.PHONY: build clean tidy run serve build-all build-linux build-darwin build-windows build-with-ble

BINARY_NAME=opencode-monitor
VERSION=$(shell git describe --tags --always --dirty 2>/dev/null || echo "dev")
GO?=go

build:
	$(GO) mod tidy
	$(GO) build -ldflags "-X main.Version=$(VERSION)" -o bin/$(BINARY_NAME) ./cmd/monitor

clean:
	rm -rf bin/ dist/

tidy:
	$(GO) mod tidy

run: build
	./bin/$(BINARY_NAME) monitor --ports 4096

serve: build
	./bin/$(BINARY_NAME) serve --addr :8080

monitor-with-api: build
	./bin/$(BINARY_NAME) monitor --ports 4096 --api-addr :8080

config-list: build
	./bin/$(BINARY_NAME) config list

config-set: build
	./bin/$(BINARY_NAME) config set --broker tcp://127.0.0.1:1883

build-all: build-linux build-darwin build-windows

build-linux:
	@echo "Building for Linux..."
	@mkdir -p dist
	GOOS=linux GOARCH=amd64 $(GO) build -ldflags "-X main.Version=$(VERSION)" -o dist/$(BINARY_NAME)-linux-amd64 ./cmd/monitor
	GOOS=linux GOARCH=arm64 $(GO) build -ldflags "-X main.Version=$(VERSION)" -o dist/$(BINARY_NAME)-linux-arm64 ./cmd/monitor

build-darwin:
	@echo "Building for macOS..."
	@mkdir -p dist
	GOOS=darwin GOARCH=amd64 $(GO) build -ldflags "-X main.Version=$(VERSION)" -o dist/$(BINARY_NAME)-darwin-amd64 ./cmd/monitor
	GOOS=darwin GOARCH=arm64 $(GO) build -ldflags "-X main.Version=$(VERSION)" -o dist/$(BINARY_NAME)-darwin-arm64 ./cmd/monitor

build-windows:
	@echo "Building for Windows..."
	@mkdir -p dist
	GOOS=windows GOARCH=amd64 $(GO) build -ldflags "-X main.Version=$(VERSION)" -o dist/$(BINARY_NAME)-windows-amd64.exe ./cmd/monitor
	GOOS=windows GOARCH=arm64 $(GO) build -ldflags "-X main.Version=$(VERSION)" -o dist/$(BINARY_NAME)-windows-arm64.exe ./cmd/monitor

release: build-all
	@echo "Creating release archives..."
	@cd dist && tar -czf $(BINARY_NAME)-linux-amd64.tar.gz $(BINARY_NAME)-linux-amd64
	@cd dist && tar -czf $(BINARY_NAME)-linux-arm64.tar.gz $(BINARY_NAME)-linux-arm64
	@cd dist && tar -czf $(BINARY_NAME)-darwin-amd64.tar.gz $(BINARY_NAME)-darwin-amd64
	@cd dist && tar -czf $(BINARY_NAME)-darwin-arm64.tar.gz $(BINARY_NAME)-darwin-arm64
	@cd dist && zip -q $(BINARY_NAME)-windows-amd64.zip $(BINARY_NAME)-windows-amd64.exe
	@cd dist && zip -q $(BINARY_NAME)-windows-arm64.zip $(BINARY_NAME)-windows-arm64.exe
	@echo "Release archives created in dist/"

build-with-ble:
	@echo "Step 1: Building BLE relay with PyInstaller..."
	python -m PyInstaller --onefile --name ble_relay --distpath bin --specpath build --workpath build scripts/ble_relay.py
	@echo "Step 2: Copying BLE relay for embedding..."
	cp bin/ble_relay cmd/monitor/ble_relay
	@echo "Step 3: Building Go binary with BLE embedded..."
	$(GO) mod tidy
	$(GO) build -tags ble -ldflags "-X main.Version=$(VERSION)" -o bin/$(BINARY_NAME) ./cmd/monitor
	@echo "Step 4: Cleaning up..."
	rm -f cmd/monitor/ble_relay
	@echo "Done: bin/$(BINARY_NAME)"
