.PHONY: build build-linux build-windows build-all clean help

# Variables
BINARY_NAME=go-migrate
CMD_PATH=./cmd/go_migrate
OUTPUT_DIR=bin
VERSION?=$(shell git describe --tags --always --dirty 2>/dev/null || echo "dev")
BUILD_TIME=$(shell date -u '+%Y-%m-%d_%H:%M:%S')
GIT_COMMIT=$(shell git rev-parse --short HEAD 2>/dev/null || echo "unknown")

# Flags de compilación
LD_FLAGS=-ldflags="-s -w -X main.Version=$(VERSION) -X main.BuildTime=$(BUILD_TIME) -X main.GitCommit=$(GIT_COMMIT)"

# Default: compilar para el SO actual
build: build-$(OS)

ifeq ($(OS),Windows_NT)
build-native: build-windows
else
build-native: build-linux
endif

# Compilar para Linux (sin CGO para máxima compatibilidad)
build-linux:
	@echo "Compilando para Linux..."
	@mkdir -p $(OUTPUT_DIR)
	CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \
		$(LD_FLAGS) \
		-o $(OUTPUT_DIR)/$(BINARY_NAME)-linux-amd64 \
		$(CMD_PATH)
	@echo "Binario creado: $(OUTPUT_DIR)/$(BINARY_NAME)-linux-amd64"

# Compilar para Windows
build-windows:
	@echo "Compilando para Windows..."
	@mkdir -p $(OUTPUT_DIR)
	CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build \
		$(LD_FLAGS) \
		-o $(OUTPUT_DIR)/$(BINARY_NAME)-windows-amd64.exe \
		$(CMD_PATH)
	@echo "Binario creado: $(OUTPUT_DIR)/$(BINARY_NAME)-windows-amd64.exe"

# Compilar para ambas plataformas
build-all: build-linux build-windows
	@echo ""
	@echo "Binarios compilados:"
	@ls -lh $(OUTPUT_DIR)/$(BINARY_NAME)*

# Compilar para Linux arm64 (opcional, para Raspberry Pi, etc.)
build-linux-arm64:
	@echo "Compilando para Linux ARM64..."
	@mkdir -p $(OUTPUT_DIR)
	CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build \
		$(LD_FLAGS) \
		-o $(OUTPUT_DIR)/$(BINARY_NAME)-linux-arm64 \
		$(CMD_PATH)
	@echo "Binario creado: $(OUTPUT_DIR)/$(BINARY_NAME)-linux-arm64"

# Limpiar binarios
clean:
	@echo "Limpiando binarios..."
	@rm -rf $(OUTPUT_DIR)
	@echo "Limpieza completada"

# Ayuda
help:
	@echo "Comandos disponibles:"
	@echo ""
	@echo "  make build              - Compilar para el SO actual (Linux/Windows)"
	@echo "  make build-linux        - Compilar para Linux x86_64"
	@echo "  make build-windows      - Compilar para Windows x86_64"
	@echo "  make build-linux-arm64  - Compilar para Linux ARM64 (opcional)"
	@echo "  make build-all          - Compilar para Linux y Windows"
	@echo "  make clean              - Eliminar binarios compilados"
	@echo "  make help               - Mostrar esta ayuda"
	@echo ""
	@echo "Ejemplos de uso:"
	@echo "  make build-all          # Crear binarios para ambas plataformas"
	@echo "  make build-linux OS=    # Crear solo para Linux"
	@echo ""
