# ─────────────────────────────────────────────────────────────────────────────
# Bitsia Next — Makefile
# ─────────────────────────────────────────────────────────────────────────────

IMAGE_NAME     ?= bitsia-next
IMAGE_TAG      ?= latest
CONTAINER_NAME ?= bitsia-next
PORT           ?= 3000
REGISTRY       ?= # e.g. ghcr.io/yourorg

.DEFAULT_GOAL := help

.PHONY: help build run up down logs shell clean push lint tag

# ── Help ──────────────────────────────────────────────────────────────────────
help:
	@echo ""
	@echo "  Bitsia Next — Docker targets"
	@echo ""
	@echo "  build       Build the production Docker image"
	@echo "  run         Run the image directly (foreground, auto-removed)"
	@echo "  up          Start via docker-compose (detached)"
	@echo "  down        Stop docker-compose services"
	@echo "  logs        Tail docker-compose logs"
	@echo "  shell       Open a shell in the running container"
	@echo "  clean       Stop services and remove image"
	@echo "  lint        Run ESLint inside a temporary container"
	@echo "  tag         Tag image for registry  (requires REGISTRY=...)"
	@echo "  push        Push tagged image to registry (requires REGISTRY=...)"
	@echo ""
	@echo "  Variables (override on the command line):"
	@echo "    IMAGE_NAME=$(IMAGE_NAME)  IMAGE_TAG=$(IMAGE_TAG)"
	@echo "    PORT=$(PORT)  REGISTRY=$(REGISTRY)"
	@echo ""

# ── Build ─────────────────────────────────────────────────────────────────────
build:
	docker build --target runner -t $(IMAGE_NAME):$(IMAGE_TAG) .

# ── Run (one-off, foreground) ─────────────────────────────────────────────────
run: build
	docker run --rm \
		-p $(PORT):3000 \
		--name $(CONTAINER_NAME) \
		-e NODE_ENV=production \
		$(IMAGE_NAME):$(IMAGE_TAG)

# ── Docker Compose ────────────────────────────────────────────────────────────
up:
	PORT=$(PORT) docker compose up -d --build

down:
	docker compose down

logs:
	docker compose logs -f

# ── Shell into running container ──────────────────────────────────────────────
shell:
	docker exec -it $(CONTAINER_NAME) sh

# ── Lint (runs inside a fresh container, no server started) ──────────────────
lint: build
	docker run --rm --entrypoint npm $(IMAGE_NAME):$(IMAGE_TAG) run lint

# ── Registry ──────────────────────────────────────────────────────────────────
tag: build
	@test -n "$(REGISTRY)" || (echo "ERROR: set REGISTRY=<host/org>" && exit 1)
	docker tag $(IMAGE_NAME):$(IMAGE_TAG) $(REGISTRY)/$(IMAGE_NAME):$(IMAGE_TAG)

push: tag
	docker push $(REGISTRY)/$(IMAGE_NAME):$(IMAGE_TAG)

# ── Clean ─────────────────────────────────────────────────────────────────────
clean:
	docker compose down --volumes --remove-orphans 2>/dev/null || true
	docker rmi $(IMAGE_NAME):$(IMAGE_TAG) 2>/dev/null || true
