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

# Speak Chinese briefing text locally.
# First try sherpa-onnx (more natural). Fallback to Piper if it fails.
# Usage:
#   brief_speak.sh "text..."
#   brief_speak.sh --in text.txt
# Options:
#   --volume 0-100   (default 100)

BASE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
VITS="$BASE_DIR/bin/vits_speak.sh"
PIPER="$BASE_DIR/bin/piper_speak.sh"
CLEANER="$BASE_DIR/bin/brief_text_clean.py"

IN_FILE=""
TEXT=""
VOLUME_PCT="100"

while [[ $# -gt 0 ]]; do
  case "$1" in
    --in)
      IN_FILE="$2"; shift 2;;
    --volume)
      VOLUME_PCT="$2"; shift 2;;
    -h|--help)
      sed -n '1,120p' "$0"; exit 0;;
    *)
      if [[ -z "$TEXT" && -z "$IN_FILE" ]]; then
        TEXT="$1"; shift
      else
        echo "Unknown arg: $1" >&2
        exit 2
      fi
      ;;
  esac
done

# Prepare cleaned text file
SRC_TXT=""
TMP_SRC=""
if [[ -n "$IN_FILE" ]]; then
  SRC_TXT="$IN_FILE"
else
  TMP_SRC="$(mktemp)"
  printf "%s\n" "$TEXT" > "$TMP_SRC"
  SRC_TXT="$TMP_SRC"
fi

CLEAN_TXT="$(mktemp)"
python3 "$CLEANER" --in "$SRC_TXT" --out "$CLEAN_TXT" || cp "$SRC_TXT" "$CLEAN_TXT"

set +e
"$VITS" --in "$CLEAN_TXT" --volume "$VOLUME_PCT"
rc=$?
set -e

if [[ $rc -ne 0 ]]; then
  "$PIPER" --in "$CLEAN_TXT" --volume "$VOLUME_PCT"
fi

rm -f "$CLEAN_TXT"
if [[ -n "$TMP_SRC" ]]; then
  rm -f "$TMP_SRC"
fi
