"""Synthesize lines with Gemini prebuilt voices (no cloning). GEMINI_API_KEY from env.
Usage: gemini_tts.py <voice> <text-file> <out.wav>"""
import base64, os, sys, wave, httpx

MODEL = os.environ.get("GEMINI_TTS_MODEL", "gemini-3.8-flash-tts")

def speak(voice: str, text: str, out: str) -> None:
    url = f"https://generativelanguage.googleapis.com/v1beta/models/{MODEL}:generateContent"
    body = {
        "contents": [{"parts": [{"text": text}]}],
        "generationConfig": {
            "responseModalities": ["AUDIO"],
            "speechConfig": {"voiceConfig": {"prebuiltVoiceConfig": {"voiceName": voice}}},
        },
    }
    r = httpx.post(url, json=body, headers={"x-goog-api-key": os.environ["GEMINI_API_KEY"]}, timeout=300)
    r.raise_for_status()
    part = r.json()["candidates"][0]["content"]["parts"][0]["inlineData"]
    pcm = base64.b64decode(part["data"])
    with wave.open(out, "wb") as w:
        w.setnchannels(1); w.setsampwidth(2); w.setframerate(24000); w.writeframes(pcm)

if __name__ == "__main__":
    speak(sys.argv[1], open(sys.argv[2], encoding="utf-8").read(), sys.argv[3])
