# Makefile
.PHONY: build-all build-amd64 build-arm64 build-armhf build-386 clean help

APP_NAME = audio-recorder
VERSION = $(shell git describe --tags --always --dirty 2>/dev/null || echo "dev")
BUILD_TIME = $(shell date -u '+%Y-%m-%d_%H:%M:%S')
LDFLAGS = -ldflags="-s -w -X main.Version=$(VERSION) -X main.BuildTime=$(BUILD_TIME)"

# Цвета для вывода
GREEN = \033[0;32m
RED = \033[0;31m
NC = \033[0m

all: build-all

# AMD64 (x86_64) - для обычных ПК и серверов
build-amd64:
	@echo "$(GREEN)Building for AMD64 (x86_64)...$(NC)"
	GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build $(LDFLAGS) -o $(APP_NAME)-amd64
	@echo "$(GREEN)✅ Done: $(APP_NAME)-amd64$(NC)"
	@ls -lh $(APP_NAME)-amd64
	@file $(APP_NAME)-amd64

# ARM64 (aarch64) - для Raspberry Pi 4/5, Orange Pi Zero 2W, Apple Silicon
build-arm64:
	@echo "$(GREEN)Building for ARM64 (aarch64)...$(NC)"
	GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build $(LDFLAGS) -o $(APP_NAME)-arm64
	@echo "$(GREEN)✅ Done: $(APP_NAME)-arm64$(NC)"
	@ls -lh $(APP_NAME)-arm64
	@file $(APP_NAME)-arm64

# ARMHF (armv7l) - для старых Raspberry Pi 2/3, Orange Pi PC
build-armhf:
	@echo "$(GREEN)Building for ARMHF (armv7l)...$(NC)"
	GOOS=linux GOARCH=arm GOARM=7 CGO_ENABLED=0 go build $(LDFLAGS) -o $(APP_NAME)-armhf
	@echo "$(GREEN)✅ Done: $(APP_NAME)-armhf$(NC)"
	@ls -lh $(APP_NAME)-armhf
	@file $(APP_NAME)-armhf

# ARMv6 (armv6l) - для Raspberry Pi Zero, Raspberry Pi 1
build-armv6:
	@echo "$(GREEN)Building for ARMv6 (armv6l)...$(NC)"
	GOOS=linux GOARCH=arm GOARM=6 CGO_ENABLED=0 go build $(LDFLAGS) -o $(APP_NAME)-armv6
	@echo "$(GREEN)✅ Done: $(APP_NAME)-armv6$(NC)"
	@ls -lh $(APP_NAME)-armv6

# 32-bit x86 - для старых 32-битных систем
build-386:
	@echo "$(GREEN)Building for 386 (32-bit x86)...$(NC)"
	GOOS=linux GOARCH=386 CGO_ENABLED=0 go build $(LDFLAGS) -o $(APP_NAME)-386
	@echo "$(GREEN)✅ Done: $(APP_NAME)-386$(NC)"
	@ls -lh $(APP_NAME)-386

# Windows AMD64
build-windows:
	@echo "$(GREEN)Building for Windows AMD64...$(NC)"
	GOOS=windows GOARCH=amd64 CGO_ENABLED=0 go build $(LDFLAGS) -o $(APP_NAME)-windows-amd64.exe
	@echo "$(GREEN)✅ Done: $(APP_NAME)-windows-amd64.exe$(NC)"
	@ls -lh $(APP_NAME)-windows-amd64.exe

# macOS AMD64 (Intel)
build-darwin-amd64:
	@echo "$(GREEN)Building for macOS AMD64 (Intel)...$(NC)"
	GOOS=darwin GOARCH=amd64 CGO_ENABLED=0 go build $(LDFLAGS) -o $(APP_NAME)-darwin-amd64
	@echo "$(GREEN)✅ Done: $(APP_NAME)-darwin-amd64$(NC)"
	@ls -lh $(APP_NAME)-darwin-amd64

# macOS ARM64 (Apple Silicon M1/M2)
build-darwin-arm64:
	@echo "$(GREEN)Building for macOS ARM64 (Apple Silicon)...$(NC)"
	GOOS=darwin GOARCH=arm64 CGO_ENABLED=0 go build $(LDFLAGS) -o $(APP_NAME)-darwin-arm64
	@echo "$(GREEN)✅ Done: $(APP_NAME)-darwin-arm64$(NC)"
	@ls -lh $(APP_NAME)-darwin-arm64

# Сборка всех Linux архитектур
build-linux: build-amd64 build-arm64 build-armhf build-armv6 build-386
	@echo "$(GREEN)✅ All Linux builds complete!$(NC)"

# Сборка всех архитектур
build-all: build-linux build-windows build-darwin-amd64 build-darwin-arm64
	@echo "$(GREEN)✅ All builds complete!$(NC)"

# Очистка
clean:
	@echo "$(GREEN)Cleaning...$(NC)"
	rm -f $(APP_NAME)-*
	@echo "$(GREEN)✅ Clean complete$(NC)"

# Упаковка в архив для каждой архитектуры
package:
	@echo "$(GREEN)Creating packages...$(NC)"
	mkdir -p packages
	for arch in amd64 arm64 armhf armv6 386; do \
		if [ -f "$(APP_NAME)-$$arch" ]; then \
			mkdir -p packages/$(APP_NAME)-$$arch; \
			cp $(APP_NAME)-$$arch packages/$(APP_NAME)-$$arch/; \
			cp -r static packages/$(APP_NAME)-$$arch/; \
			cd packages && tar -czf $(APP_NAME)-$$arch.tar.gz $(APP_NAME)-$$arch && cd ..; \
			rm -rf packages/$(APP_NAME)-$$arch; \
			echo "$(GREEN)✅ Created $(APP_NAME)-$$arch.tar.gz$(NC)"; \
		fi \
	done
	rm -rf packages
	@echo "$(GREEN)✅ Packaging complete!$(NC)"

# Помощь
help:
	@echo "Available targets:"
	@echo "  make build-amd64      - Build for Linux AMD64 (x86_64)"
	@echo "  make build-arm64      - Build for Linux ARM64 (aarch64)"
	@echo "  make build-armhf      - Build for Linux ARMHF (armv7l)"
	@echo "  make build-armv6      - Build for Linux ARMv6 (Raspberry Pi Zero)"
	@echo "  make build-386        - Build for Linux 386 (32-bit x86)"
	@echo "  make build-windows    - Build for Windows AMD64"
	@echo "  make build-darwin-amd64 - Build for macOS Intel"
	@echo "  make build-darwin-arm64 - Build for macOS Apple Silicon"
	@echo "  make build-linux      - Build all Linux architectures"
	@echo "  make build-all        - Build all architectures"
	@echo "  make clean            - Remove all binaries"
	@echo "  make package          - Create tar.gz packages"
	@echo "  make help             - Show this help"