MODULE   := github.com/gitlink-org/gitlink-cli
BINARY   := gitlink-cli
VERSION  ?= $(shell git describe --tags --always --dirty 2>/dev/null || echo "dev")
LDFLAGS  := -s -w -X '$(MODULE)/cmd.Version=$(VERSION)'

PLATFORMS := darwin/amd64 darwin/arm64 linux/amd64 linux/arm64 windows/amd64 windows/arm64

.PHONY: build install clean test lint cross-build dist checksums

build:
	go build -ldflags "$(LDFLAGS)" -o $(BINARY) .

install:
	go install -ldflags "$(LDFLAGS)" .

clean:
	rm -f $(BINARY)
	rm -rf dist/

test:
	go test ./...

lint:
	go vet ./...

# Cross-compile for all supported platforms
cross-build:
	@mkdir -p dist
	@for pair in $(PLATFORMS); do \
		GOOS=$${pair%/*}; \
		GOARCH=$${pair#*/}; \
		OUT=$(BINARY); \
		if [ "$$GOOS" = "windows" ]; then OUT=$(BINARY).exe; fi; \
		echo "Building $$GOOS/$$GOARCH..."; \
		BUILD_DIR="dist/$(BINARY)_$(VERSION)_$${GOOS}_$${GOARCH}"; \
		mkdir -p "$$BUILD_DIR"; \
		CGO_ENABLED=0 GOOS=$$GOOS GOARCH=$$GOARCH \
			go build -ldflags "$(LDFLAGS)" -o "$$BUILD_DIR/$$OUT" .; \
		if [ "$$GOOS" = "windows" ]; then \
			(cd "$$BUILD_DIR" && zip -q "../$(BINARY)_$(VERSION)_$${GOOS}_$${GOARCH}.zip" "$$OUT"); \
		else \
			tar -czf "dist/$(BINARY)_$(VERSION)_$${GOOS}_$${GOARCH}.tar.gz" -C "$$BUILD_DIR" "$$OUT"; \
		fi; \
		rm -rf "$$BUILD_DIR"; \
	done
	@echo "Build complete:"
	@ls -lh dist/*.tar.gz dist/*.zip 2>/dev/null

# Generate SHA256 checksums for all archives in dist/
checksums: cross-build
	@cd dist && \
		sha256sum *.tar.gz *.zip 2>/dev/null > checksums-sha256.txt && \
		echo "Checksums written to dist/checksums-sha256.txt" && \
		cat checksums-sha256.txt

# Full distribution build: cross-compile + checksums
dist: checksums
