#!/usr/bin/env bash
# replacequestion.sh
# Usage: replacequestion.sh <original-file> [template-file]
# original-file wird überschrieben .

set -euo pipefail

if [ "${1-}" = "" ]; then
  echo "Nutzung: $0 <original-file> [template-file]" >&2
  exit 2
fi

OLD="$1"
SRC="${2:-docker-questionextern.yml}"
OUT="$OLD"

if [ ! -f "$OLD" ]; then
  echo "Fehler: Original-Datei '$OLD' nicht gefunden." >&2
  exit 1
fi
if [ ! -f "$SRC" ]; then
  echo "Fehler: Template-Datei '$SRC' nicht gefunden." >&2
  exit 1
fi

# Nummer extrahieren (versucht grep -P, sonst perl)
NUM=""
COMMENT=""
if grep -oP '^\s*#\s*Question\s+\K\d+' "$OLD" >/dev/null 2>&1; then
  NUM=$(grep -Po '^\s*#\s*Question\s+\K\d+' "$OLD" | head -n1)
  COMMENT=$(grep -Po '^\s*#\s*Question\s+\d+\s*\K.*' "$OLD" | head -n1)
fi

if [ -z "$NUM" ]; then
  if grep -oP '(?<=QUESTION_)\d+' "$OLD" >/dev/null 2>&1; then
    NUM=$(grep -oP '(?<=QUESTION_)\d+' "$OLD" | head -n1)
  fi
fi

if [ -z "$NUM" ]; then
  NUM=$(perl -0777 -ne 'print $1 and exit if /# Question (\d+)/m; print $1 and exit if /QUESTION_(\d+)/m' "$OLD" || true)
fi

if [ -z "$NUM" ]; then
  echo "Konnte Nummer nicht finden (weder '# Question N' noch 'QUESTION_N' gefunden)" >&2
  exit 3
fi

# Suche nach dem Tag des DATA-Services
questiontag="stable"
if grep -oP '(?<=image: lettohub/letto-service-question:)[a-zA-Z0-9\-_\.]+' "$OLD" >/dev/null 2>&1; then
  questiontag=$(grep -Po '(?<=image: lettohub/letto-service-question:)[a-zA-Z0-9\-_\.]+' "$OLD" | head -n1)
fi

# Suche nach dem letzten Tag eines lettohub-Services
lettotag="stable"
if grep -oP 'image: lettohub/[a-zA-Z0-9\-_\.]+:\K[a-zA-Z0-9\-_\.]+' "$OLD" >/dev/null 2>&1; then
  lettotag=$(grep -Po 'image: lettohub/[a-zA-Z0-9\-_\.]+:\K[a-zA-Z0-9\-_\.]+' "$OLD" | head -n1)
fi

# Validierung 1..1000
if ! [[ "$NUM" =~ ^[0-9]+$ ]]; then
  echo "Gefundener Wert '$NUM' ist keine Zahl." >&2
  exit 4
fi
if [ "$NUM" -lt 1 ] || [ "$NUM" -gt 1000 ]; then
  echo "Gefundene Nummer '$NUM' ausserhalb Bereich 1..1000." >&2
  exit 5
fi

DEBUG_PORT=$((4300 + NUM))
sed -E "
  s/(\b|[^A-Za-z0-9_])# Question [0-9]+/\1# Question ${NUM} ${COMMENT}/g;
  s/(\b|[^A-Za-z0-9_])QUESTION_[0-9]+/\1QUESTION_${NUM}/g;
  s/(\b|[^A-Za-z0-9_])question[0-9]+:/\1question${NUM}:/g;
  s/(image: lettohub\/[A-Za-z0-9_.-]+:)[A-Za-z0-9_][A-Za-z0-9_.-]*/\1${lettotag}/g;
  s/(image: lettohub\/letto-service-question:)[A-Za-z0-9_][A-Za-z0-9_.-]*/\1${questiontag}/g;
  s/(DEBUG_PORT:-)[0-9]+(\}:5102)/\1${DEBUG_PORT}\2/g;
" "$SRC" > "$OUT"

echo "OK: $OUT mit Nummer $NUM erstellt. Letto:$lettotag, question: $questiontag"
exit 0
