.PHONY: build push test update clean help

# Detect container engine (podman or docker)
CONTAINER_CMD := $(shell command -v podman 2>/dev/null || command -v docker 2>/dev/null)

REGISTRY ?= registry.gitlab.com/towerops/towerops
DOCKERHUB_REGISTRY ?= docker.io/gmcintire
IMAGE_NAME ?= towerops-base
BUILDER_TAG ?= builder
RUNTIME_TAG ?= runtime
ELIXIR_VERSION ?= 1.19.4
OTP_VERSION ?= 28.3
DEBIAN_VERSION ?= trixie-20251229-slim

help: ## Show this help message
	@echo "Available targets:"
	@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "  \033[36m%-15s\033[0m %s\n", $$1, $$2}'

build: ## Build the base image with latest packages
	@chmod +x build.sh
	@./build.sh

update: build ## Alias for build (rebuilds with latest packages)

test: ## Test the built images
	@echo "Testing builder image..."
	@$(CONTAINER_CMD) run --rm $(REGISTRY)/$(IMAGE_NAME):$(BUILDER_TAG) mix --version
	@echo "Testing runtime image..."
	@$(CONTAINER_CMD) run --rm $(REGISTRY)/$(IMAGE_NAME):$(RUNTIME_TAG) locale | grep "en_US.UTF-8"
	@echo "✅ All tests passed!"

push: ## Push images to GitLab and Docker Hub
	@echo "Pushing to GitLab registry..."
	@$(CONTAINER_CMD) push $(REGISTRY)/$(IMAGE_NAME):$(BUILDER_TAG)
	@$(CONTAINER_CMD) push $(REGISTRY)/$(IMAGE_NAME):$(RUNTIME_TAG)
	@$(CONTAINER_CMD) push $(REGISTRY)/$(IMAGE_NAME):latest
	@echo "Tagging for Docker Hub..."
	@$(CONTAINER_CMD) tag $(REGISTRY)/$(IMAGE_NAME):$(BUILDER_TAG) $(DOCKERHUB_REGISTRY)/$(IMAGE_NAME):$(BUILDER_TAG)
	@$(CONTAINER_CMD) tag $(REGISTRY)/$(IMAGE_NAME):$(RUNTIME_TAG) $(DOCKERHUB_REGISTRY)/$(IMAGE_NAME):$(RUNTIME_TAG)
	@$(CONTAINER_CMD) tag $(REGISTRY)/$(IMAGE_NAME):latest $(DOCKERHUB_REGISTRY)/$(IMAGE_NAME):latest
	@echo "Pushing to Docker Hub..."
	@$(CONTAINER_CMD) push $(DOCKERHUB_REGISTRY)/$(IMAGE_NAME):$(BUILDER_TAG)
	@$(CONTAINER_CMD) push $(DOCKERHUB_REGISTRY)/$(IMAGE_NAME):$(RUNTIME_TAG)
	@$(CONTAINER_CMD) push $(DOCKERHUB_REGISTRY)/$(IMAGE_NAME):latest

pull: ## Pull latest images from registry
	@$(CONTAINER_CMD) pull $(REGISTRY)/$(IMAGE_NAME):$(BUILDER_TAG)
	@$(CONTAINER_CMD) pull $(REGISTRY)/$(IMAGE_NAME):$(RUNTIME_TAG)

inspect: ## Show image details (size, layers, labels)
	@echo "Builder image:"
	@$(CONTAINER_CMD) images $(REGISTRY)/$(IMAGE_NAME):$(BUILDER_TAG) --format "table {{.Repository}}:{{.Tag}}\t{{.Size}}\t{{.CreatedAt}}"
	@echo ""
	@echo "Runtime image:"
	@$(CONTAINER_CMD) images $(REGISTRY)/$(IMAGE_NAME):$(RUNTIME_TAG) --format "table {{.Repository}}:{{.Tag}}\t{{.Size}}\t{{.CreatedAt}}"
	@echo ""
	@echo "Builder labels:"
	@$(CONTAINER_CMD) inspect $(REGISTRY)/$(IMAGE_NAME):$(BUILDER_TAG) --format '{{range $$k, $$v := .Config.Labels}}{{$$k}}={{$$v}}{{println}}{{end}}'
	@echo ""
	@echo "Runtime labels:"
	@$(CONTAINER_CMD) inspect $(REGISTRY)/$(IMAGE_NAME):$(RUNTIME_TAG) --format '{{range $$k, $$v := .Config.Labels}}{{$$k}}={{$$v}}{{println}}{{end}}'

clean: ## Remove local images
	@$(CONTAINER_CMD) rmi $(REGISTRY)/$(IMAGE_NAME):$(BUILDER_TAG) || true
	@$(CONTAINER_CMD) rmi $(REGISTRY)/$(IMAGE_NAME):$(RUNTIME_TAG) || true
	@$(CONTAINER_CMD) rmi $(REGISTRY)/$(IMAGE_NAME):latest || true
	@$(CONTAINER_CMD) rmi $(DOCKERHUB_REGISTRY)/$(IMAGE_NAME):$(BUILDER_TAG) || true
	@$(CONTAINER_CMD) rmi $(DOCKERHUB_REGISTRY)/$(IMAGE_NAME):$(RUNTIME_TAG) || true
	@$(CONTAINER_CMD) rmi $(DOCKERHUB_REGISTRY)/$(IMAGE_NAME):latest || true
	@echo "✅ Cleaned local images"

login: ## Login to GitLab container registry
	@$(CONTAINER_CMD) login registry.gitlab.com

login-dockerhub: ## Login to Docker Hub
	@$(CONTAINER_CMD) login docker.io

# Quick commands
b: build ## Shortcut for build
t: test ## Shortcut for test
p: push ## Shortcut for push
