#!/usr/bin/env python3
import sys, json, wave
from vosk import Model, KaldiRecognizer

MODEL_PATH = "/var/www/html/ffvoice/stt/model-pt"

def transcribe(wav_path):
    wf = wave.open(wav_path, "rb")
    if wf.getnchannels() != 1 or wf.getsampwidth() != 2 or wf.getframerate() not in [8000,16000]:
        # precisamos garantir formato PCM mono 16-bit 16k ou 8k.
        return json.dumps({"error":"formato_invalido"})

    model = Model(MODEL_PATH)
    rec = KaldiRecognizer(model, wf.getframerate())
    rec.SetWords(True)

    result_text = ""

    while True:
        data = wf.readframes(4000)
        if len(data) == 0:
            break
        if rec.AcceptWaveform(data):
            parcial = json.loads(rec.Result())
            result_text += " " + parcial.get("text","")
    final = json.loads(rec.FinalResult())
    result_text += " " + final.get("text","")

    return json.dumps({"text": result_text.strip()})

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print(json.dumps({"error":"sem_arquivo"}))
        sys.exit(0)
    path = sys.argv[1]
    print(transcribe(path))
