import whisper
import numpy as np
import subprocess
import sys
from config import RTSP_URL

def run_live_stream():
    print(f"--- Starte Live-Transkription ---")
    print(f"Verbindung zu: {RTSP_URL}")
    
    # 1. Whisper Modell laden (base ist schnell genug für Live)
    print("Lade KI-Modell...")
    model = whisper.load_model("base")
    
    # 2. FFmpeg Befehl für den Live-Stream
    # Wir ziehen Audio direkt von Misty und wandeln es in das Whisper-Format
    command = [
        'ffmpeg',
        '-rtsp_transport', 'tcp', # TCP ist stabiler für den Roboter
        '-i', RTSP_URL,
        '-ar', '16000',           # Whisper braucht 16kHz
        '-ac', '1',               # Mono
        '-f', 's16le',            # Raw PCM Format
        '-'                       # Ausgabe an Pipe (stdout)
    ]

    # Startet den FFmpeg-Prozess im Hintergrund
    process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL)

    print("\n[LIVE] Höre zu... (Strg+C zum Beenden)\n")

    try:
        while True:
            # Wir lesen einen 5-Sekunden Block für die Analyse
            # 16000 Samples/s * 2 Bytes/Sample * 5s = 160000 Bytes
            raw_audio = process.stdout.read(160000)
            
            if not raw_audio:
                break

            # In Numpy-Array umwandeln und normalisieren
            audio_np = np.frombuffer(raw_audio, dtype=np.int16).astype(np.float32) / 32768.0
            
            # Transkription durchführen
            result = model.transcribe(audio_np, fp16=False, language="de")
            
            # Text ausgeben
            text = result['text'].strip()
            if text:
                print(f"Erkannt: {text}")

    except KeyboardInterrupt:
        print("\nStoppe Live-Stream...")
    finally:
        process.terminate()

if __name__ == "__main__":
    run_live_stream()
