# ==============================================================
# VEREINS.HAUS — Makefile
# Deploy-Strategie: SSH zur DS, Docker Compose
# ==============================================================

DS_HOST          := ds
DS_IP            := 10.47.11.10
DS_SSH_PORT      := 4711
DS_PATH          := /volume1/docker/vereinshaus
CONTAINER_PB     := vereinshaus-pocketbase
CONTAINER_APP    := vereinshaus-app
DOCKER           := sudo /usr/local/bin/docker

TAR_EXCLUDE := --exclude='.git' \
               --exclude='./app/node_modules' \
               --exclude='./app/.svelte-kit' \
               --exclude='./app/build' \
               --exclude='./.env' \
               --exclude='./.DS_Store'

HOOKS_SRC := pocketbase/pb_hooks
HOOKS_DST := /volume1/docker/vereinshaus/pocketbase/data/pb_hooks

.PHONY: help check-ssh start stop restart status logs logs-f logs-app \
        shell-pb pb-admin deploy

# ----------------------------------------------------------
# Hilfe
# ----------------------------------------------------------
help:
	@echo ""
	@echo "  vereins.haus — verfügbare Befehle:"
	@echo ""
	@echo "  make deploy      App bauen + zur DS übertragen + Container neu starten"
	@echo "  make start       Alle Container starten"
	@echo "  make stop        Alle Container stoppen"
	@echo "  make restart     Alle Container neu starten"
	@echo "  make status      Container-Status anzeigen"
	@echo ""
	@echo "  make logs        PocketBase-Logs (100 Zeilen)"
	@echo "  make logs-app    App-Logs (100 Zeilen)"
	@echo "  make logs-f      PocketBase Live-Log"
	@echo "  make shell-pb    Shell in PocketBase-Container"
	@echo "  make pb-admin    PocketBase Admin-URL anzeigen"
	@echo ""

# ----------------------------------------------------------
# SSH-Prüfung
# ----------------------------------------------------------
check-ssh:
	@if ! nc -z -w3 $(DS_IP) $(DS_SSH_PORT) 2>/dev/null; then \
		echo ""; \
		echo "  ✗ DS nicht erreichbar ($(DS_IP):$(DS_SSH_PORT))"; \
		echo ""; \
		exit 1; \
	fi

# ----------------------------------------------------------
# DEPLOY
# ----------------------------------------------------------
deploy: check-ssh
	@echo "→ Sync zu DS..."
	@COPYFILE_DISABLE=1 tar czf - $(TAR_EXCLUDE) . | ssh $(DS_HOST) "tar xzf - -C $(DS_PATH)/"
	@echo "→ .env auf DS aktualisieren..."
	@if [ -f .env ]; then \
		grep -E "BREVO_KEY" .env | ssh $(DS_HOST) "cat > $(DS_PATH)/.env"; \
	fi
	@echo "→ PocketBase Hooks synchronisieren..."
	@if ls $(HOOKS_SRC)/*.pb.js 2>/dev/null | grep -q .; then \
		for f in $(HOOKS_SRC)/*.pb.js; do \
			cat "$$f" | ssh $(DS_HOST) "cat > $(HOOKS_DST)/$$(basename $$f)"; \
		done; \
	fi
	@echo "→ Docker rebuild + restart..."
	@ssh $(DS_HOST) " \
		cd $(DS_PATH) && \
		$(DOCKER) compose down && \
		$(DOCKER) compose build app && \
		$(DOCKER) compose up -d"
	@echo "  ✓ Deploy fertig."
	@ssh $(DS_HOST) "$(DOCKER) logs $(CONTAINER_APP) --tail=10"

# ----------------------------------------------------------
# Container-Steuerung
# ----------------------------------------------------------
start: check-ssh
	@ssh $(DS_HOST) "cd $(DS_PATH) && $(DOCKER) compose up -d"
	@echo "  ✓ Gestartet."

stop: check-ssh
	@ssh $(DS_HOST) "cd $(DS_PATH) && $(DOCKER) compose down"
	@echo "  ✓ Gestoppt."

restart: check-ssh
	@ssh $(DS_HOST) "cd $(DS_PATH) && $(DOCKER) compose restart"
	@echo "  ✓ Neugestartet."

status: check-ssh
	@ssh $(DS_HOST) "$(DOCKER) ps \
		--filter name=vereinshaus \
		--format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'"

# ----------------------------------------------------------
# Logs
# ----------------------------------------------------------
logs: check-ssh
	@ssh $(DS_HOST) "$(DOCKER) logs $(CONTAINER_PB) --tail=100"

logs-app: check-ssh
	@ssh $(DS_HOST) "$(DOCKER) logs $(CONTAINER_APP) --tail=100"

logs-f: check-ssh
	@ssh $(DS_HOST) "$(DOCKER) logs $(CONTAINER_PB) -f"

# ----------------------------------------------------------
# Shell + Admin
# ----------------------------------------------------------
shell-pb: check-ssh
	@ssh -t $(DS_HOST) "$(DOCKER) exec -it $(CONTAINER_PB) sh"

pb-admin:
	@echo "  PocketBase Admin: https://api.vereins.haus/_/"
