.PHONY: build clean push release help

VERSION ?= 1.0.0
S3_BUCKET ?= 
BINARY_NAME ?= installer
BUILD_DIR := ./dist

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

build: $(addprefix $(BUILD_DIR)/$(BINARY_NAME)-, $(subst /,-,$(ARCHS)))

$(BUILD_DIR)/$(BINARY_NAME)-linux-amd64:
	@mkdir -p $(BUILD_DIR)
	CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-extldflags -static" -o $@ ./cmd

$(BUILD_DIR)/$(BINARY_NAME)-linux-arm64:
	@mkdir -p $(BUILD_DIR)
	CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -ldflags="-extldflags -static" -o $@ ./cmd

$(BUILD_DIR)/$(BINARY_NAME)-darwin-amd64:
	@mkdir -p $(BUILD_DIR)
	CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o $@ ./cmd

$(BUILD_DIR)/$(BINARY_NAME)-darwin-arm64:
	@mkdir -p $(BUILD_DIR)
	CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -o $@ ./cmd

$(BUILD_DIR)/$(BINARY_NAME)-windows-amd64:
	@mkdir -p $(BUILD_DIR)
	CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o $@ ./cmd

clean:
	rm -rf $(BUILD_DIR)

push: build
ifndef S3_BUCKET
	$(error S3_BUCKET is not set)
endif
	aws s3 sync $(BUILD_DIR)/ s3://$(S3_BUCKET)/installer/$(VERSION)/ --exclude '*' --include '$(BINARY_NAME)-*'
	aws s3 sync $(BUILD_DIR)/ s3://$(S3_BUCKET)/installer/latest/ --exclude '*' --include '$(BINARY_NAME)-*'

release: build
ifndef S3_BUCKET
	$(error S3_BUCKET is not set)
endif
	@for arch in $(ARCHS); do \
		os=$$(echo $$arch | cut -d/ -f1); \
		arch_name=$$(echo $$arch | cut -d/ -f2); \
		ext=$$(if [ $$os = windows ]; then .exe; else ''; fi); \
		src="$(BUILD_DIR)/$(BINARY_NAME)-$$arch"; \
		dest="s3://$(S3_BUCKET)/installer/$(VERSION)/$(BINARY_NAME)-$$os-$$arch_name$$ext"; \
		aws s3 cp $$src $$dest; \
		aws s3 cp $$src "s3://$(S3_BUCKET)/installer/latest/$(BINARY_NAME)-$$os-$$arch_name$$ext"; \
	done

help:
	@echo "Variables:"
	@echo "  VERSION     - Version tag (default: 1.0.0)"
	@echo "  S3_BUCKET   - S3 bucket name (required for push/release)"
	@echo "  BINARY_NAME - Binary name (default: installer)"
	@echo ""
	@echo "Targets:"
	@echo "  build   - Build binaries for all architectures"
	@echo "  push    - Sync dist/ to S3 (version + latest)"
	@echo "  release - Copy each binary to S3 with proper naming"
	@echo "  clean   - Remove dist/"
	@echo "  help    - Show this help"
	@echo ""
	@echo "Examples:"
	@echo "  make build"
	@echo "  make build VERSION=2.0.0"
	@echo "  make push S3_BUCKET=my-bucket VERSION=1.0.0"
	@echo "  make release S3_BUCKET=my-bucket VERSION=2.0.0"
