# Extension:  make install | make update
# Server:     make dev (lokal, Port $(PORT)) | make prod (auf dem Server) | make stop | make logs | make down | make test
UUID = desktop@marha.de
SRC = $(CURDIR)/$(UUID)
DEST = $(HOME)/.local/share/gnome-shell/extensions/$(UUID)
VENV = backend/.venv
PORT ?= 8040
SYNC_URL = https://planer.marha.de
SYNC_JSON = $(HOME)/.local/share/desktop-app/sync.json

.ONESHELL:
.PHONY: install update enable sync-config reload venv dev prod stop logs down test

install:
	@if [ -e "$(DEST)" ]; then
	    echo "Schon installiert: $(DEST)"
	    echo "Zum Aktualisieren: make update"
	    exit 0
	fi
	mkdir -p "$(dir $(DEST))"
	cp -r "$(SRC)" "$(DEST)"
	$(MAKE) --no-print-directory enable sync-config
	echo "Installiert. Jetzt ab- und wieder anmelden."

update:
	@if [ ! -e "$(DEST)" ]; then
	    echo "Nicht installiert. Zuerst: make install"
	    exit 1
	fi
	if [ -L "$(DEST)" ]; then
	    echo "$(DEST) ist ein Symlink auf $(SRC), nichts zu kopieren."
	else
	    rm -rf "$(DEST)"
	    cp -r "$(SRC)" "$(DEST)"
	    echo "Aktualisiert."
	fi
	$(MAKE) --no-print-directory sync-config reload
	echo "Neuer Code wirkt nach dem nächsten Ab- und Anmelden."

# UUID in die aktiven Extensions eintragen, falls sie fehlt
enable:
	@python3 dev/enable.py "$(UUID)"

# sync.json aus der .env anlegen, falls sie fehlt. Ohne .env bleibt die Extension rein lokal.
sync-config:
	@if [ -f "$(SYNC_JSON)" ]; then
	    echo "Sync-Zugang vorhanden: $(SYNC_JSON)"
	elif [ -f .env ] && grep -q "^SYNC_TOKEN=.\+" .env; then
	    mkdir -p "$(dir $(SYNC_JSON))"
	    printf '{"url": "$(SYNC_URL)", "token": "%s", "interval": 5}\n' "$$(grep ^SYNC_TOKEN= .env | cut -d= -f2-)" > "$(SYNC_JSON)"
	    chmod 600 "$(SYNC_JSON)"
	    echo "Sync-Zugang angelegt: $(SYNC_JSON)"
	else
	    echo "Kein Sync-Zugang: .env mit SYNC_TOKEN fehlt. Extension läuft lokal."
	fi

# Extension aus- und einschalten, damit sie sync.json neu liest. Geht nur in einer laufenden Session.
reload:
	@if gnome-extensions info $(UUID) 2>/dev/null | grep -q "ACTIVE"; then
	    gnome-extensions disable $(UUID) && gnome-extensions enable $(UUID)
	    echo "Extension neu gestartet."
	fi

# ── Server ───────────────────────────────────────────────────────────────────
venv: $(VENV)/bin/uvicorn

$(VENV)/bin/uvicorn: backend/requirements.txt
	python3 -m venv $(VENV)
	$(VENV)/bin/pip install -q -r backend/requirements.txt

# Lokal entwickeln. Token kommt aus .env (Vorlage: .env.example).
dev: venv
	@[ -f .env ] || { echo ".env fehlt. Vorlage: cp .env.example .env, dann SYNC_TOKEN setzen."; exit 1; }
	set -a; . ./.env; set +a
	echo "Server: http://localhost:$(PORT)"
	cd backend && .venv/bin/uvicorn app.main:app --reload --port $(PORT)

# Produktion (auf dem Server ausführen, im Projektverzeichnis)
prod:
	@[ -f .env ] || { echo ".env fehlt. Vorlage: cp .env.example .env, dann SYNC_TOKEN setzen."; exit 1; }
	docker compose up -d --build
	echo "läuft: https://planer.marha.de"

# [u] statt u: so trifft das Muster nicht die eigene Shell, die es im Aufruf trägt
stop:
	-pkill -f "$(CURDIR)/$(VENV)/bin/python3 .venv/bin/[u]vicorn" 2>/dev/null
	echo "gestoppt."

logs:
	docker compose logs -f

down:
	docker compose down

test: venv
	cd backend && .venv/bin/python -m pytest -q
