#!/usr/bin/env bash
# Generisches Audio-Batch-Script — nimmt JSON-Textbuch mit Struktur
#   { "lines": [ {"id": "...", "text": "..."} ] }
# und generiert MP3s via ElevenLabs in sounds/radio/<id>.mp3
#
# Aufruf:
#   set -a; source App/.env.local; set +a
#   App/sims/heli/scripts/generate-audio-batch.sh tower-geo-lines.json
#   App/sims/heli/scripts/generate-audio-batch.sh tower-start-lines.json
#   FORCE=1 …   überschreibt bestehende Files
set -e
: "${ELEVENLABS_API_KEY:?ELEVENLABS_API_KEY muss gesetzt sein}"

VOICE_ID="${ELEVENLABS_VOICE_ID:-EXAVITQu4vr4xnSDxMaL}"
MODEL_ID="${ELEVENLABS_MODEL_ID:-eleven_multilingual_v2}"

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
OUT_DIR="$SCRIPT_DIR/../sounds/radio"
mkdir -p "$OUT_DIR"

JSON_INPUT="$1"
if [ -z "$JSON_INPUT" ]; then
  echo "Usage: $0 <tower-geo-lines.json | tower-start-lines.json | ...>"
  exit 2
fi
JSON_FILE="$SCRIPT_DIR/$JSON_INPUT"
if [ ! -f "$JSON_FILE" ]; then
  echo "✗ Datei nicht gefunden: $JSON_FILE"; exit 2
fi

generate() {
  local id="$1"
  local text="$2"
  local out="$OUT_DIR/${id}.mp3"
  if [ -f "$out" ] && [ -z "$FORCE" ]; then
    echo "✓ ${id}.mp3 schon da"; return 0
  fi
  echo "→ ${id}"
  local payload
  payload=$(TEXT="$text" MODEL="$MODEL_ID" python -c '
import json, os
print(json.dumps({
    "text": os.environ["TEXT"],
    "model_id": os.environ["MODEL"],
    "voice_settings": {"stability": 0.58, "similarity_boost": 0.78, "style": 0.30, "use_speaker_boost": True}
}))')
  curl -sS -X POST "https://api.elevenlabs.io/v1/text-to-speech/$VOICE_ID" \
    -H "xi-api-key: $ELEVENLABS_API_KEY" \
    -H "accept: audio/mpeg" \
    -H "content-type: application/json" \
    -d "$payload" \
    --output "$out"
  local size; size=$(wc -c <"$out")
  if [ "$size" -lt 1500 ]; then
    echo "✗ ${id}: Fehler — Datei zu klein ($size B). Inhalt:"
    cat "$out"; rm -f "$out"; return 1
  fi
  echo "✓ ${id}.mp3 ($size B)"
  sleep 0.4
}

ok=0; fail=0
python -c "
import json, sys
d = json.load(sys.stdin)
for line in d['lines']: print(line['id'] + '\t' + line['text'])
" < "$JSON_FILE" | while IFS=$'\t' read -r id text; do
  [ -z "$id" ] && continue
  if generate "$id" "$text"; then ok=$((ok+1)); else fail=$((fail+1)); echo "STOP bei Fehler"; break; fi
done

echo
echo "Ablage: $OUT_DIR"
ls -1 "$OUT_DIR"/*.mp3 2>/dev/null | wc -l | xargs printf "Dateien insgesamt: %s\n"
