#!/usr/bin/env python3
"""Generate Telegram-ready OGG/Opus voice from text via Piper.

Usage: aria-voice-reply.py "Hallo Kais, Test."  ->  prints OGG path
"""
import sys, subprocess, tempfile, os, hashlib

MODEL = "/root/piper-voices/de_DE-ramona-low.onnx"
OUT_DIR = "/tmp/aria-voice"

def synth(text: str) -> str:
    os.makedirs(OUT_DIR, exist_ok=True)
    digest = hashlib.sha1(text.encode()).hexdigest()[:12]
    wav_path = os.path.join(OUT_DIR, f"{digest}.wav")
    ogg_path = os.path.join(OUT_DIR, f"{digest}.ogg")
    if os.path.exists(ogg_path):
        return ogg_path
    # Piper
    p = subprocess.run(["piper", "-m", MODEL, "-f", wav_path],
                       input=text.encode(), capture_output=True, timeout=60)
    if p.returncode != 0:
        raise RuntimeError(f"piper failed: {p.stderr.decode()[:500]}")
    # ffmpeg convert to Opus in OGG
    p = subprocess.run(["ffmpeg", "-y", "-loglevel", "error",
                        "-i", wav_path, "-c:a", "libopus", "-b:a", "32k",
                        "-ar", "48000", ogg_path],
                       capture_output=True, timeout=30)
    if p.returncode != 0:
        raise RuntimeError(f"ffmpeg failed: {p.stderr.decode()[:500]}")
    try:
        os.remove(wav_path)
    except OSError:
        pass
    return ogg_path

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("Usage: aria-voice-reply.py \"<text>\"", file=sys.stderr)
        sys.exit(2)
    text = " ".join(sys.argv[1:]).strip()
    if not text:
        sys.exit(2)
    print(synth(text))
