#!/usr/bin/env zsh
set -euo pipefail

# rebreak-monorepo helper: git add . + commit + push origin <current-branch>.
# Usage: ./xgit "fix(backend/sos): single-instruction tts"
# Wenn keine Message: prompted interaktiv.
# Wenn Backend-Files geändert: bietet pre-push nitro build an (optional).

if ! git rev-parse --git-dir > /dev/null 2>&1; then
  echo "Error: aktuelles Verzeichnis ist kein Git-Repository" >&2
  exit 1
fi

if [ "$#" -gt 0 ]; then
  msg="$*"
else
  printf "Commit message: " >&2
  read -r msg
fi

if [ -z "${msg// /}" ]; then
  echo "Abbruch: Commit-Message leer" >&2
  exit 1
fi

# Backend-Files staged? → Build-Validation anbieten.
if git status --porcelain | grep -qE '^.. backend/(server|prisma|nitro\.config)' 2>/dev/null; then
  printf "Backend-Files geändert. nitro build vor push? [Y/n] " >&2
  read -r run_build
  if [[ "$run_build" != "n" && "$run_build" != "N" ]]; then
    echo "Starte nitro build..."
    (cd backend && pnpm build) || { echo "Build fehlgeschlagen – Commit abgebrochen." >&2; exit 1; }
    echo ""
  fi
fi

echo "Staging alle Änderungen..."
git add .

if git diff --cached --quiet; then
  echo "Keine Änderungen zum Commit vorhanden." >&2
  exit 0
fi

echo "Erstelle Commit: $msg"
git commit -m "$msg"

branch=$(git rev-parse --abbrev-ref HEAD)

echo "Pushe Branch $branch nach origin..."
git push origin "$branch"

echo "Fertig."
