.PHONY: all build build-linux build-windows clean test run

# Binary names
BINARY_NAME=corrosion-host-agent
BINARY_LINUX=$(BINARY_NAME)-linux-amd64
BINARY_WINDOWS=$(BINARY_NAME)-windows-amd64.exe

# Build directory
BUILD_DIR=bin

# Go parameters
GOCMD=go
GOBUILD=$(GOCMD) build
GOCLEAN=$(GOCMD) clean
GOTEST=$(GOCMD) test
GOGET=$(GOCMD) get
GOMOD=$(GOCMD) mod

# Version (overridable via: make build-linux VERSION=v1.2.3)
VERSION ?= dev

# Build flags
LDFLAGS = -ldflags "-s -w -X main.version=$(VERSION)"

all: clean build

build: build-linux build-windows

build-linux:
	@echo "Building for Linux (amd64)..."
	@mkdir -p $(BUILD_DIR)
	GOOS=linux GOARCH=amd64 $(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_LINUX) ./cmd/agent
	@echo "Built: $(BUILD_DIR)/$(BINARY_LINUX)"

build-windows:
	@echo "Building for Windows (amd64)..."
	@mkdir -p $(BUILD_DIR)
	GOOS=windows GOARCH=amd64 $(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_WINDOWS) ./cmd/agent
	@echo "Built: $(BUILD_DIR)/$(BINARY_WINDOWS)"

build-local:
	@echo "Building for current platform..."
	@mkdir -p $(BUILD_DIR)
	$(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME) ./cmd/agent
	@echo "Built: $(BUILD_DIR)/$(BINARY_NAME)"

clean:
	@echo "Cleaning..."
	@$(GOCLEAN)
	@rm -rf $(BUILD_DIR)

test:
	@echo "Running tests..."
	@$(GOTEST) -v ./...

deps:
	@echo "Downloading dependencies..."
	@$(GOMOD) download
	@$(GOMOD) tidy

run: build-local
	@echo "Running agent..."
	@./$(BUILD_DIR)/$(BINARY_NAME)

# Install systemd service (Linux only)
install-service:
	@echo "Installing systemd service..."
	@sudo cp $(BUILD_DIR)/$(BINARY_LINUX) /usr/local/bin/$(BINARY_NAME)
	@sudo cp deployment/corrosion-host-agent.service /etc/systemd/system/
	@sudo systemctl daemon-reload
	@sudo systemctl enable corrosion-host-agent
	@echo "Service installed. Configure /etc/corrosion-host-agent/.env then start with: sudo systemctl start corrosion-host-agent"

# Development helpers
dev: build-local
	@./$(BUILD_DIR)/$(BINARY_NAME)

fmt:
	@echo "Formatting code..."
	@$(GOCMD) fmt ./...

lint:
	@echo "Running linter..."
	@golangci-lint run ./...

# Show build info
info:
	@echo "Build Information:"
	@echo "  Binary Name: $(BINARY_NAME)"
	@echo "  Linux Binary: $(BUILD_DIR)/$(BINARY_LINUX)"
	@echo "  Windows Binary: $(BUILD_DIR)/$(BINARY_WINDOWS)"
	@echo "  Go Version: $(shell go version)"
