import gradio as gr

from long_memory import NetworkMemoryClient
from model import ModelClient
from tg_news_scrapper import scrape_telegram_posts
from xtts.XTTSApi import XTTSApi

conversation_themes = ["Майоры", "Базар", "Ярославль"]
current_theme = None
default_system_prompt = ("Если тебя просят что то запомнить, то ОБЯЗАТЕЛЬНО!!! добавляй в первым словом ответа 'abcd' "
                         "и далее очень коротко расскажи что ты запомнила. Добавляй 'abcd' только в том случае, "
                         "если тебя действительно просят что то запомнить. Ты моя подруга, веди себя как скромная "
                         "девушка.")
client = ModelClient()
audio_client = XTTSApi("http://127.0.0.1:7854")


def initialize_system_prompt():
    memory_client = NetworkMemoryClient()
    memory_data = memory_client.fetch_memory()
    memory_sentences = [record[1] for record in memory_data]
    memory_context = " ".join(memory_sentences)
    return f"{default_system_prompt} Вот информация из памяти: {memory_context}" \
        if memory_context else default_system_prompt


system = initialize_system_prompt()


def handle_query(message, history, context_theme):
    global current_theme
    global system

    if context_theme != current_theme:
        news = scrape_telegram_posts(context_theme)

        system = (f"{system} Отвечай на вопросы беря информацию из контекста. Отвечай на русском языке. Не стесняйся "
                  f"использовать"
                  f"смайлы и прикреплять ссылки."
                  f" Вот последняя информация: \n{news}")

        current_theme = context_theme

    response = client.get_response(message=message, history=history, sys_prompt=system)

    memory_client = NetworkMemoryClient()
    memory_client.check_memory_message(response)

    if "abcd" in response[-1]:
        memory_content = response[0]
        response[-1] = response[-1].replace("abcd ", "").strip()
        system = f"{system} {memory_content}"

    print(audio_client.generate_audio(tts_text=response[-1]))
    return response[-1]


with gr.Blocks() as demo:
    interface = gr.ChatInterface(fn=handle_query,
                                 theme="soft",
                                 examples=[["Расскажи очень коротко 5 самых важных новостей"]],
                                 retry_btn=None,
                                 clear_btn="Clear",
                                 additional_inputs=[
                                     gr.Dropdown(conversation_themes, label="Выберите тему контекста:")],
                                 css="footer{display:none !important}"
                                 )
    interface.textbox.placeholder = "Давай поговорим, пиши.."
    interface.textbox.container = False
    interface.textbox.scale = 7

    interface.chatbot.height = 500

    with gr.Accordion("Голосовые сообщения", open=True):
        with gr.Row():
            audio = gr.Textbox(elem_id="audio-base64", visible=False)
            btn = gr.Button("Записать сообщение", elem_id="record-button", elem_classes="custom-button")

demo.title = "VirtualIst"

demo.queue().launch(server_name="0.0.0.0", server_port=7847, ssl_verify=False)
# demo.queue().launch()
# server_name="0.0.0.0", server_port=7846, ssl_verify=False

Как мне выводить аудио с audio_client.generate_audio(tts_text=response[-1])