import sys
import json
import sherpa_onnx

display_caption = False
caption_index = -1
display = sherpa_onnx.Display()

def stdout(text: str):
    stdout_cmd("print", text)

def stdout_err(text: str):
    stdout_cmd("error", text)

def stdout_cmd(command: str, content = ""):
    msg = { "command": command, "content": content }
    sys.stdout.write(json.dumps(msg) + "\n")
    sys.stdout.flush()

def change_caption_display(val: bool):
    global display_caption
    display_caption = val

def caption_display(obj):
    global display_caption
    global caption_index
    global display

    if caption_index >=0 and caption_index != int(obj['index']):
        display.finalize_current_sentence()
    caption_index = int(obj['index'])
    full_text = f"{obj['text']}\n{obj['translation']}"
    if obj['translation']:
        full_text += "\n"
    display.update_text(full_text)
    display.display()

def translation_display(obj):
    global original_caption
    global display
    full_text = f"{obj['text']}\n{obj['translation']}"
    if obj['translation']:
        full_text += "\n"
    display.update_text(full_text)
    display.display()
    display.finalize_current_sentence()

def stdout_obj(obj):
    global display_caption
    if obj['command'] == 'caption' and display_caption:
        caption_display(obj)
        return
    if obj['command'] == 'translation' and display_caption:
        translation_display(obj)
        return
    sys.stdout.write(json.dumps(obj) + "\n")
    sys.stdout.flush()

def stderr(text: str):
    sys.stderr.write(text + "\n")
    sys.stderr.flush()
