#!/usr/bin/env bash
# Auf rz1: Bare-Repo für Update-API lesbar machen (www-data) + prüfen.
#   sudo bash /var/www/cms-update-api/fix-repo-permissions-rz1.sh
set -euo pipefail

REPO="${CMS_UPDATE_REPO:-/var/www/cms-default}"
WEB_USER="${CMS_WEB_USER:-www-data}"

echo "=== CMS-Repo auf rz1 prüfen: ${REPO} ==="

if [[ ! -d "$REPO" ]]; then
	echo "FEHLER: Verzeichnis fehlt: ${REPO}" >&2
	echo "Lösung: Auf server2 ./cms-tools/cms-update.sh ausführen (pusht nach rz1)." >&2
	exit 1
fi

if ! git -C "$REPO" rev-parse HEAD &>/dev/null; then
	echo "FEHLER: ${REPO} ist kein Git-Repo oder hat noch keinen Commit." >&2
	echo "Lösung: Auf server2 ./cms-tools/cms-update.sh ausführen." >&2
	exit 1
fi

echo "Git (root): $(git -C "$REPO" rev-parse --short HEAD) auf $(git -C "$REPO" branch -a | head -3 | tr '\n' ' ')"

# Git: systemweit – PHP (www-data) darf Bare-Repo lesen
if ! git config --system --get-all safe.directory 2>/dev/null | grep -qx "$REPO"; then
	git config --system --add safe.directory "$REPO" 2>/dev/null || true
fi

chgrp -R "$WEB_USER" "$REPO" 2>/dev/null || true
chmod -R g+rX "$REPO"
find "$REPO" -type d -exec chmod g+x {} \;

if id "$WEB_USER" &>/dev/null; then
	if sudo -u "$WEB_USER" git -C "$REPO" rev-parse --short HEAD &>/dev/null; then
		echo "OK: ${WEB_USER} kann Repo lesen."
	else
		echo "FEHLER: ${WEB_USER} kann Repo nicht lesen – Rechte prüfen." >&2
		exit 1
	fi
fi

ENV_FILE="/var/www/cms-update-api/cms-update-env.sh"
if [[ -f "$ENV_FILE" ]]; then
	chown "$WEB_USER:$WEB_USER" "$ENV_FILE" 2>/dev/null || true
	chmod 640 "$ENV_FILE"
	echo "Env: $ENV_FILE"
fi

echo ""
echo "Fertig. Im CMS erneut „Status prüfen“."
