# Default target
.DEFAULT_GOAL := help

# Build configuration
VERSION := $(shell cat ../VERSION 2>/dev/null || echo "0.0.0-dev")
BUILD_DIR := build
DIST_DIR := dist
DEB_DIR := debian-package

# Git information
GIT_COMMIT := $(shell git rev-parse --short HEAD 2>/dev/null || echo "unknown")
BUILD_TIME := $(shell date -u '+%Y-%m-%d_%H:%M:%S')

# Source paths
API_SOURCE := ../api
WEB_SOURCE := ../web
CLI_SOURCE := ../cli

# Output files
ARM64_BINARY := $(BUILD_DIR)/wild-cloud-central-arm64
AMD64_BINARY := $(BUILD_DIR)/wild-cloud-central-amd64
ARM64_CLI := $(BUILD_DIR)/wild-cli-arm64
AMD64_CLI := $(BUILD_DIR)/wild-cli-amd64
WEB_DIST_MARKER := $(BUILD_DIR)/.web-built
ARM64_DEB := $(DIST_DIR)/packages/wild-cloud-central_$(VERSION)_arm64.deb
AMD64_DEB := $(DIST_DIR)/packages/wild-cloud-central_$(VERSION)_amd64.deb

# Gitea release configuration
GITEA_URL := https://git.civilsociety.dev
GITEA_OWNER := wild-cloud
GITEA_REPO := wild-cloud
RELEASE_TAG := v$(VERSION)

.PHONY: help clean version build build-all package package-all repo deploy-repo release

help:
	@echo "📦 Wild Cloud Central Package Builder"
	@echo ""
	@echo "This repository builds .deb packages from the monorepo."
	@echo "For development, use the individual component directories:"
	@echo "  - api (Go daemon)"
	@echo "  - web (React frontend)"
	@echo ""
	@echo "📦 Build targets:"
	@echo "  build           - Build for current architecture (amd64)"
	@echo "  build-all       - Build all architectures"
	@echo ""
	@echo "📋 Package targets:"
	@echo "  package         - Create .deb package (amd64)"
	@echo "  package-all     - Create all .deb packages"
	@echo ""
	@echo "🚀 Repository targets:"
	@echo "  repo            - Build APT repository from packages"
	@echo "  deploy-repo     - Deploy repository to server"
	@echo ""
	@echo "🎯 Release targets:"
	@echo "  release         - Create/update Gitea release with packages"
	@echo ""
	@echo "🛠️  Utilities:"
	@echo "  clean           - Remove all build artifacts"
	@echo "  version         - Show build information"
	@echo ""
	@echo "Version Management:"
	@echo "  Current version: $(VERSION) (from ../VERSION)"
	@echo "  To bump version: echo '0.1.2' > ../VERSION"
	@echo ""
	@echo "Environment variables:"
	@echo "  GITEA_TOKEN     - Gitea API token (required for release)"
	@echo "                   Run: source .envrc"

clean:
	@echo "🧹 Cleaning build artifacts..."
	@rm -rf $(BUILD_DIR) $(DIST_DIR) $(DEB_DIR)-* $(DEB_DIR)
	@echo "✅ Clean complete"

version:
	@echo "Version: $(VERSION)"
	@echo "Git Commit: $(GIT_COMMIT)"
	@echo "Build Time: $(BUILD_TIME)"

# Web app build - track with marker file
$(WEB_DIST_MARKER): $(shell find $(WEB_SOURCE)/src -type f 2>/dev/null | head -100) $(WEB_SOURCE)/package.json
	@echo "🔧 Building web application..."
	@ARCH=amd64 VERSION=$(VERSION) ./scripts/build-package.sh
	@touch $(WEB_DIST_MARKER)
	@echo "✅ Web app built"

# ARM64 binary
$(ARM64_BINARY): $(shell find $(API_SOURCE) -name '*.go' 2>/dev/null | head -100)
	@echo "🔧 Building arm64 binary..."
	@mkdir -p $(BUILD_DIR)/bin
	@cd $(API_SOURCE) && GOOS=linux GOARCH=arm64 go build -ldflags="-X main.Version=$(VERSION)" -o ../dist/$(ARM64_BINARY) .
	@echo "✅ Build complete: $(ARM64_BINARY)"

# AMD64 binary
$(AMD64_BINARY): $(shell find $(API_SOURCE) -name '*.go' 2>/dev/null | head -100)
	@echo "🔧 Building amd64 binary..."
	@mkdir -p $(BUILD_DIR)/bin
	@cd $(API_SOURCE) && GOOS=linux GOARCH=amd64 go build -ldflags="-X main.Version=$(VERSION)" -o ../dist/$(AMD64_BINARY) .
	@echo "✅ Build complete: $(AMD64_BINARY)"

# ARM64 CLI
$(ARM64_CLI): $(shell find $(CLI_SOURCE) -name '*.go' 2>/dev/null | head -100)
	@echo "🔧 Building arm64 CLI..."
	@mkdir -p $(DIST_DIR)/bin
	@cd $(CLI_SOURCE) && GOOS=linux GOARCH=arm64 go build -ldflags="-X main.Version=$(VERSION)" -o ../dist/$(ARM64_CLI) .
	@echo "✅ Build complete: $(ARM64_CLI)"

# AMD64 CLI
$(AMD64_CLI): $(shell find $(CLI_SOURCE) -name '*.go' 2>/dev/null | head -100)
	@echo "🔧 Building amd64 CLI..."
	@mkdir -p $(DIST_DIR)/bin
	@cd $(CLI_SOURCE) && GOOS=linux GOARCH=amd64 go build -ldflags="-X main.Version=$(VERSION)" -o ../dist/$(AMD64_CLI) .
	@echo "✅ Build complete: $(AMD64_CLI)"

# ARM64 package
$(ARM64_DEB): $(ARM64_BINARY) $(ARM64_CLI) $(WEB_DIST_MARKER)
	@echo "📦 Creating arm64 .deb package..."
	@# Remove old versions of this architecture to prevent stale packages
	@rm -f $(DIST_DIR)/packages/wild-cloud-central_*_arm64.deb
	@./scripts/package-deb.sh arm64 $(ARM64_BINARY) $(ARM64_CLI) $(VERSION)
	@echo "✅ Package created: $(ARM64_DEB)"

# AMD64 package
$(AMD64_DEB): $(AMD64_BINARY) $(AMD64_CLI) $(WEB_DIST_MARKER)
	@echo "📦 Creating amd64 .deb package..."
	@# Remove old versions of this architecture to prevent stale packages
	@rm -f $(DIST_DIR)/packages/wild-cloud-central_*_amd64.deb
	@./scripts/package-deb.sh amd64 $(AMD64_BINARY) $(AMD64_CLI) $(VERSION)
	@echo "✅ Package created: $(AMD64_DEB)"

# Convenience targets
build: $(AMD64_BINARY) $(AMD64_CLI) $(WEB_DIST_MARKER)

build-all: $(ARM64_BINARY) $(AMD64_BINARY) $(ARM64_CLI) $(AMD64_CLI) $(WEB_DIST_MARKER)

package: $(AMD64_DEB)

package-all: $(ARM64_DEB) $(AMD64_DEB)

repo: $(ARM64_DEB) $(AMD64_DEB)
	@echo "🏗️  Building APT repository..."
	@./scripts/build-apt-repository.sh

deploy-repo: repo
	@echo "🚀 Deploying APT repository..."
	@./scripts/deploy-apt-repository.sh

release: $(ARM64_DEB) $(AMD64_DEB) $(ARM64_CLI) $(AMD64_CLI)
	@echo "🎯 Creating release $(RELEASE_TAG)..."
	@if [ -z "$(GITEA_TOKEN)" ]; then \
		echo "❌ Error: GITEA_TOKEN environment variable not set"; \
		echo "   Get a token from $(GITEA_URL)/user/settings/applications"; \
		echo "   Or run: source .envrc"; \
		exit 1; \
	fi
	@./scripts/create-gitea-release.sh "$(GITEA_URL)" "$(GITEA_OWNER)" "$(GITEA_REPO)" "$(RELEASE_TAG)" "$(VERSION)" "$(GITEA_TOKEN)"
