.PHONY: build build-all install test lint fmt clean install-tools setup-hooks check setup

# Build variables
BINARY_NAME := arm
BIN_DIR := bin
DIST_DIR := dist
VERSION := $(shell git describe --tags --always --dirty 2>/dev/null || echo "dev")
COMMIT := $(shell git rev-parse --short HEAD 2>/dev/null || echo "unknown")
BUILD_TIME := $(shell date -u '+%Y-%m-%d_%H:%M:%S')
LDFLAGS := -ldflags "-X github.com/jomadu/ai-resource-manager/internal/arm/core.buildVersion=$(VERSION) -X github.com/jomadu/ai-resource-manager/internal/arm/core.buildCommit=$(COMMIT) -X github.com/jomadu/ai-resource-manager/internal/arm/core.buildTimestamp=$(BUILD_TIME) -s -w"

# Build the binary
build:
	@mkdir -p $(BIN_DIR)
	go build $(LDFLAGS) -o $(BIN_DIR)/$(BINARY_NAME) ./cmd/arm

# Build for all platforms
build-all:
	@echo "Building for all platforms..."
	@mkdir -p $(DIST_DIR)
	GOOS=linux GOARCH=amd64 go build $(LDFLAGS) -o $(DIST_DIR)/$(BINARY_NAME)-linux-amd64 ./cmd/arm
	GOOS=linux GOARCH=arm64 go build $(LDFLAGS) -o $(DIST_DIR)/$(BINARY_NAME)-linux-arm64 ./cmd/arm
	GOOS=darwin GOARCH=amd64 go build $(LDFLAGS) -o $(DIST_DIR)/$(BINARY_NAME)-darwin-amd64 ./cmd/arm
	GOOS=darwin GOARCH=arm64 go build $(LDFLAGS) -o $(DIST_DIR)/$(BINARY_NAME)-darwin-arm64 ./cmd/arm
	GOOS=windows GOARCH=amd64 go build $(LDFLAGS) -o $(DIST_DIR)/$(BINARY_NAME)-windows-amd64.exe ./cmd/arm

# Install binary to system PATH
install: build
	@echo "Installing $(BINARY_NAME) to /usr/local/bin..."
	@cp $(BIN_DIR)/$(BINARY_NAME) /usr/local/bin/$(BINARY_NAME)
	@echo "Installation complete!"

# Run tests
test:
	go test -v -race -coverprofile=coverage.out ./...

# Format code
fmt:
	gofmt -w .
	$(shell go env GOPATH)/bin/goimports -w .

# Run linter
lint:
	$(shell go env GOPATH)/bin/golangci-lint run

# Clean build artifacts
clean:
	rm -rf $(BIN_DIR) $(DIST_DIR) coverage.out .venv

# Install development tools
install-tools:
	go install golang.org/x/tools/cmd/goimports@latest
	go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest

# Setup pre-commit hooks
setup-hooks:
	python3 -m venv .venv
	.venv/bin/pip install pre-commit
	.venv/bin/pre-commit install
	.venv/bin/pre-commit install --hook-type commit-msg

# Run all checks
check: fmt lint test

# Development setup
setup: install-tools setup-hooks
	go mod tidy
