#!/bin/bash
# Usage: ticket-setup <ticket-nr> <referenz-projekt>
# Legt ~/arbeit/tickets/<nr> als Kopie des Referenzprojekts an,
# spielt den Referenz-Snapshot ein und stellt alles auf <nr>.ddev.site um.
set -euo pipefail

TICKET_NR="$1"
REF="${2%/}"
ZIEL="$HOME/arbeit/tickets/$TICKET_NR"
SNAP="referenz"
URL="https://$TICKET_NR.ddev.site"

if [ ! -d "$REF/.ddev" ]; then
  echo "Kein ddev-Projekt: $REF"
  exit 1
fi
if [ -e "$ZIEL" ]; then
  echo "$ZIEL existiert bereits. Vorher loeschen."
  exit 1
fi

# ddev-Name des Referenzprojekts = dessen bisheriger Host <name>.ddev.site
REF_NAME=$(sed -nE 's/^name:[[:space:]]*"?([^"[:space:]]+)"?.*/\1/p' "$REF/.ddev/config.yaml" | head -1)
if [ -z "$REF_NAME" ]; then
  echo "Kein name: in $REF/.ddev/config.yaml gefunden."
  exit 1
fi

# 1. Referenz-Snapshot neu ziehen, alten wegwerfen
echo "Snapshot $SNAP wird im Referenzprojekt neu erzeugt."
rm -f "$REF/.ddev/db_snapshots/$SNAP"-*
( cd "$REF" && ddev start && ddev snapshot --name="$SNAP" )

# 2. Projekt kopieren (ohne fremde Snapshots und ohne Cache)
echo "Kopiere $REF -> $ZIEL"
mkdir -p "$ZIEL"
rsync -a --info=progress2 \
  --exclude='/.ddev/db_snapshots/' \
  --exclude='/var/cache/' \
  "$REF/" "$ZIEL/"

mkdir -p "$ZIEL/.ddev/db_snapshots"
cp "$REF/.ddev/db_snapshots/$SNAP"-* "$ZIEL/.ddev/db_snapshots/"

# Vom Referenzprojekt mitkopierte Traefik-Router loeschen. Sonst kollidieren die
# Router-Namen mit dem Referenzprojekt: traefik dedupliziert, der Healthcheck
# zaehlt aber je Datei und laeuft 60 s in den Timeout. ddev legt sie neu an.
for f in "$ZIEL/.ddev/traefik/config"/*.yaml; do
  [ -e "$f" ] || continue
  if head -1 "$f" | grep -q '^#ddev-generated'; then
    rm -f "$f"
  fi
done

# 3. ddev und Shopware auf die Ticket-URL umstellen
sed -i -E "s|^name:.*|name: \"$TICKET_NR\"|" "$ZIEL/.ddev/config.yaml"
if [ -f "$ZIEL/.env.local" ]; then
  sed -i -E "s|^APP_URL=.*|APP_URL=\"$URL\"|" "$ZIEL/.env.local"
fi

cd "$ZIEL"
ddev start
ddev snapshot restore "$SNAP"
# Nur die Domains des Referenz-Hosts umbiegen. Ein pauschales Update wuerde
# mehrere Sales Channels auf dieselbe URL setzen (unique index auf url).
ddev exec bin/console sales-channel:update:domain "$TICKET_NR.ddev.site" \
  --previous-domain "$REF_NAME.ddev.site"
ddev exec bin/console cache:clear

echo
echo "Fertig: $URL"
