BINARY := investibook
MODULE := github.com/tidbcloud/investibook/cli
VERSION ?= $(shell git describe --tags --always --dirty 2>/dev/null | sed 's|cli/||' || echo "dev")
BUILD_TIME ?= $(shell TZ=UTC date +%s)
LDFLAGS := -s -w -X main.Version=$(VERSION) -X main.BuildTime=$(BUILD_TIME)
DIST_DIR := dist

.PHONY: build install clean test dist dist-compressed dist-checksums clean-dist upload-install-script

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

install:
	CGO_ENABLED=0 go install -ldflags="$(LDFLAGS)" .

clean:
	rm -f $(BINARY)
	rm -rf $(DIST_DIR)

clean-dist:
	rm -rf $(DIST_DIR)

test:
	go test ./...

# Cross-compile for multiple platforms
dist: clean-dist
	@echo "Building for multiple platforms (version=$(VERSION))..."
	@mkdir -p $(DIST_DIR)

	# Linux x86_64
	@echo "Building for Linux x86_64..."
	GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -ldflags="$(LDFLAGS)" -o $(DIST_DIR)/$(BINARY)-linux-amd64 .

	# Linux ARM64
	@echo "Building for Linux ARM64..."
	GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -ldflags="$(LDFLAGS)" -o $(DIST_DIR)/$(BINARY)-linux-arm64 .

	# macOS ARM64 (Apple Silicon)
	@echo "Building for macOS ARM64..."
	GOOS=darwin GOARCH=arm64 CGO_ENABLED=0 go build -ldflags="$(LDFLAGS)" -o $(DIST_DIR)/$(BINARY)-darwin-arm64 .

	# macOS x86_64 (Intel)
	@echo "Building for macOS x86_64 (Intel)..."
	GOOS=darwin GOARCH=amd64 CGO_ENABLED=0 go build -ldflags="$(LDFLAGS)" -o $(DIST_DIR)/$(BINARY)-darwin-amd64 .

	@echo "Build complete! Binaries are in $(DIST_DIR)/"
	@ls -lh $(DIST_DIR)/

# Create compressed archives for distribution.
# Each archive contains a single file named "investibook" (no OS/arch suffix)
# so the auto-updater can extract and replace the running binary without renaming.
dist-compressed: dist
	@echo "Creating compressed archives..."

	# Linux x86_64
	@cd $(DIST_DIR) && cp $(BINARY)-linux-amd64 $(BINARY) && \
		tar -czf $(BINARY)-linux-amd64.tar.gz $(BINARY) && \
		rm $(BINARY) $(BINARY)-linux-amd64

	# Linux ARM64
	@cd $(DIST_DIR) && cp $(BINARY)-linux-arm64 $(BINARY) && \
		tar -czf $(BINARY)-linux-arm64.tar.gz $(BINARY) && \
		rm $(BINARY) $(BINARY)-linux-arm64

	# macOS ARM64
	@cd $(DIST_DIR) && cp $(BINARY)-darwin-arm64 $(BINARY) && \
		tar -czf $(BINARY)-darwin-arm64.tar.gz $(BINARY) && \
		rm $(BINARY) $(BINARY)-darwin-arm64

	# macOS x86_64
	@cd $(DIST_DIR) && cp $(BINARY)-darwin-amd64 $(BINARY) && \
		tar -czf $(BINARY)-darwin-amd64.tar.gz $(BINARY) && \
		rm $(BINARY) $(BINARY)-darwin-amd64

	@echo "Compressed archives created!"
	@ls -lh $(DIST_DIR)/

# Generate SHA256 checksums for all distribution archives.
# Outputs one .sha256 file per archive containing only the hex digest.
dist-checksums: dist-compressed
	@echo "Generating SHA256 checksums..."
	@for platform in linux-amd64 linux-arm64 darwin-amd64 darwin-arm64; do \
		if command -v sha256sum >/dev/null 2>&1; then \
			sha256sum $(DIST_DIR)/$(BINARY)-$$platform.tar.gz | awk '{print $$1}' > $(DIST_DIR)/$(BINARY)-$$platform.sha256; \
		else \
			shasum -a 256 $(DIST_DIR)/$(BINARY)-$$platform.tar.gz | awk '{print $$1}' > $(DIST_DIR)/$(BINARY)-$$platform.sha256; \
		fi; \
	done
	@echo "Checksums generated!"
	@cat $(DIST_DIR)/*.sha256

clean-dist:
	@rm -rf $(DIST_DIR)

# Upload install.sh to the S3 bucket root so users can run:
#   curl -fsSL https://investibook-build.s3.amazonaws.com/install.sh | bash
# Requires the AWS CLI and appropriate S3 credentials / role.
upload-install-script:
	aws s3 cp install.sh s3://investibook-build/install.sh \
		--content-type "text/plain; charset=utf-8" \
		--cache-control "no-cache, no-store, must-revalidate"
	@echo "Uploaded: https://investibook-build.s3.amazonaws.com/install.sh"
