#!/usr/bin/env bash
# ElevenLabs Text-to-Speech
# Usage: tts.sh "text" [output_file] [voice_id] [model_id]
# Output defaults to stdout as base64, or saves to file if specified.

set -euo pipefail
# shellcheck source=/dev/null
[ -f /root/clawd/.env ] && set -a && . /root/clawd/.env && set +a

TEXT="${1:-}"
OUTPUT="${2:-}"
VOICE_ID="${3:-JBFqnCBsd6RMkjVDRZzb}"   # Default: George (multilingual)
MODEL_ID="${4:-eleven_multilingual_v2}"

if [ -z "$TEXT" ]; then
  echo "Usage: $0 <text> [output_file] [voice_id] [model_id]" >&2
  echo "" >&2
  echo "Environment:" >&2
  echo "  ELEVENLABS_API_KEY  Required" >&2
  echo "" >&2
  echo "Popular voices:" >&2
  echo "  JBFqnCBsd6RMkjVDRZzb  George (multilingual)" >&2
  echo "  21m00Tcm4TlvDq8ikWAM  Rachel (English)" >&2
  echo "  AZnzlk1XvdvUeBnXmlld  Domi (English)" >&2
  echo "" >&2
  echo "Models:" >&2
  echo "  eleven_multilingual_v2   Best quality, 70+ languages" >&2
  echo "  eleven_flash_v2_5        Ultra-low latency" >&2
  echo "  eleven_turbo_v2_5        Low latency, English" >&2
  exit 1
fi

if [ -z "${ELEVENLABS_API_KEY:-}" ]; then
  echo "Error: ELEVENLABS_API_KEY not set" >&2
  exit 1
fi

RESPONSE=$(curl -s -w "\n%{http_code}" \
  -X POST "https://api.elevenlabs.io/v1/text-to-speech/${VOICE_ID}" \
  -H "xi-api-key: ${ELEVENLABS_API_KEY}" \
  -H "Content-Type: application/json" \
  -d "{
    \"text\": $(echo "$TEXT" | python3 -c 'import json,sys; print(json.dumps(sys.stdin.read().rstrip()))'),
    \"model_id\": \"${MODEL_ID}\",
    \"voice_settings\": {
      \"stability\": 0.5,
      \"similarity_boost\": 0.75
    }
  }" \
  --output /tmp/elevenlabs_tts_output.mp3)

HTTP_CODE=$(echo "$RESPONSE" | tail -1)

if [ "$HTTP_CODE" != "200" ]; then
  echo "Error: API returned HTTP $HTTP_CODE" >&2
  cat /tmp/elevenlabs_tts_output.mp3 >&2
  exit 1
fi

if [ -n "$OUTPUT" ]; then
  mv /tmp/elevenlabs_tts_output.mp3 "$OUTPUT"
  echo "Saved to: $OUTPUT"
else
  # Print path for agent to use
  echo "/tmp/elevenlabs_tts_output.mp3"
fi
