#!/usr/bin/env bash
# Local Piper TTS for morning briefing
# Usage: tts_briefing.sh "text to speak" [output_file]

set -euo pipefail

MODEL_DIR="${PIPER_MODEL_DIR:-$HOME/.cache/huggingface/hub/models--csukuangfj--vits-piper-zh_CN-huayan-medium/snapshots/8baec97632a57257b09073b7986f4d319efdc29a}"
MODEL="$MODEL_DIR/zh_CN-huayan-medium.onnx"
CONFIG="$MODEL_DIR/zh_CN-huayan-medium.onnx.json"
CACHE_DIR="${AUDIO_CACHE_DIR:-$HOME/.hermes/audio_cache}"

OUT_FILE=""
TEXT=""

# Parse args
while [[ $# -gt 0 ]]; do
    case "$1" in
        --out)
            OUT_FILE="$2"
            shift 2
            ;;
        *)
            TEXT="$1"
            shift
            ;;
    esac
done

if [[ -z "$TEXT" ]]; then
    # Read from stdin if no positional arg
    TEXT="$(cat)"
fi

if [[ -z "$TEXT" ]]; then
    echo "Usage: tts_briefing.sh \"text\" [--out output.wav]" >&2
    exit 1
fi

mkdir -p "$CACHE_DIR"

if [[ -z "$OUT_FILE" ]]; then
    OUT_FILE="$CACHE_DIR/tts_$(date +%Y%m%d_%H%M%S).wav"
fi

echo "$TEXT" | piper -m "$MODEL" -c "$CONFIG" -f "$OUT_FILE" --sentence-silence 0.3

echo "$OUT_FILE"