.PHONY: install dev stop sync build prod logs down push pull stream stream-local stream-stop mtx mtx-stop

install:
	cd backend && python3 -m venv .venv && .venv/bin/pip install -r requirements.txt
	cd frontend && npm install

# MediaMTX nimmt den Stream entgegen. Ohne ihn läuft der Stream-Reiter ins
# Leere und OBS findet keinen Server.
mtx:
	@docker ps --filter name=horror-mtx-dev --format '{{.Names}}' | grep -q . || \
		docker run -d --name horror-mtx-dev --network host \
			--env-file .env \
			-e MTX_AUTHINTERNALUSERS_0_PASS="$$(grep '^MTX_SENDEPASSWORT=' .env | cut -d= -f2-)" \
			-v "$(PWD)/mediamtx/mediamtx.yml:/mediamtx.yml:ro" \
			bluenviron/mediamtx:latest > /dev/null
	@echo "MediaMTX läuft: RTMP auf :1935, HLS auf :8890"

mtx-stop:
	-@docker rm -f horror-mtx-dev 2>/dev/null > /dev/null
	@echo "MediaMTX gestoppt."

dev: mtx
	@echo "Backend: http://localhost:8000  Frontend: http://localhost:5173"
	@cd backend && .venv/bin/uvicorn app.main:app --reload --port 8000 &
	@cd frontend && npx vite --port 5173

stop: mtx-stop stream-stop
	-@pkill -f "uvicorn app.main:app" 2>/dev/null
	-@pkill -f "vite --port 5173" 2>/dev/null
	@echo "gestoppt."

# Katalog holen und fehlende Teaser erzeugen (läuft im Betrieb täglich 4:30)
sync:
	cd backend && .venv/bin/python -m app.sync

build:
	cd frontend && npm run build

# ── Produktion (auf dem Server ausführen, im Projektverzeichnis) ──────────────
prod:
	docker compose up -d --build
	@echo "horror läuft: https://horror.marha.de"

# Der Sync läuft im Container, ein backend/.venv gibt es dort nicht
sync-prod:
	docker compose exec horror python -m app.sync

logs:
	docker compose logs -f

down:
	docker compose down

# ── Senden ───────────────────────────────────────────────────────────────────
# Der Regelfall geht an den Server. Ein anderes Ziel bei Bedarf:
#   make stream ZIEL=anderer.host
ZIEL ?= horror.marha.de

# Räumt vorher auf: ein noch laufendes OBS belegt sonst die Sendestrecke,
# und der Tonweg wird sauber neu aufgebaut.
stream: stream-stop
	@scripts/stream.sh $(ZIEL)

# Zum Ausprobieren ohne Server, gegen das lokale MediaMTX
stream-local: mtx
	@scripts/stream.sh 127.0.0.1

stream-stop:
	-@pkill -f "obs --profile filmabend" 2>/dev/null
	-@scripts/ton.sh ab
	@echo "OBS beendet."

# ── Datenbank hin und her (lokal ausführen) ───────────────────────────────────
SERVER = root@178.104.67.87
REMOTE = /var/www/horror
LOKAL  = backend/horror.db

# Eine laufende App schreibt weiter, während kopiert wird. Deshalb erst eine
# in sich stimmige Kopie ziehen, statt die Datei direkt anzufassen.
SICHERN = import sqlite3,sys; q=sqlite3.connect(sys.argv[1]); z=sqlite3.connect(sys.argv[2]); q.backup(z); z.close(); q.close()

push:
	@echo "Überschreibt die Datenbank auf dem Server, auch die Vorschläge."
	backend/.venv/bin/python -c '$(SICHERN)' $(LOKAL) /tmp/horror-push.db
	ssh $(SERVER) 'mkdir -p $(REMOTE)/data && [ ! -f $(REMOTE)/data/horror.db ] || cp $(REMOTE)/data/horror.db $(REMOTE)/data/horror.db.bak'
	scp /tmp/horror-push.db $(SERVER):$(REMOTE)/data/horror.db
	@rm -f /tmp/horror-push.db
	@echo "Fertig. Die alte Datenbank liegt als data/horror.db.bak daneben."

pull:
	@echo "Überschreibt deine lokale Datenbank."
	ssh $(SERVER) 'python3 -c "$(SICHERN)" $(REMOTE)/data/horror.db /tmp/horror-pull.db'
	@[ ! -f $(LOKAL) ] || cp $(LOKAL) $(LOKAL).bak
	scp $(SERVER):/tmp/horror-pull.db $(LOKAL)
	@ssh $(SERVER) 'rm -f /tmp/horror-pull.db'
	@echo "Fertig. Deine alte Datenbank liegt als $(LOKAL).bak daneben."
