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

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-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-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 && 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/"
