import os

import gradio as gr

from api.audio import STTManager, TTSManager
from api.llm import LLMManager
from config import config
from resources.prompts import prompts
from ui.coding import get_problem_solving_ui
from ui.instructions import get_instructions_ui
from utils.params import default_audio_params

llm = LLMManager(config, prompts)
tts = TTSManager(config)
stt = STTManager(config)

default_audio_params["streaming"] = stt.streaming

if os.getenv("SILENT", False):
    tts.read_last_message = lambda x: None

# Interface

with gr.Blocks(title="AI Interviewer") as demo:
    audio_output = gr.Audio(label="Play audio", autoplay=True, visible=os.environ.get("DEBUG", False), streaming=tts.streaming)
    instructions_tab = get_instructions_ui(llm, tts, stt, default_audio_params)
    coding_tab = get_problem_solving_ui(llm, tts, stt, default_audio_params, audio_output, name="Coding", interview_type="coding")
    ml_design_tab = get_problem_solving_ui(
        llm, tts, stt, default_audio_params, audio_output, name="ML Design (Beta)", interview_type="ml_design"
    )
    ml_theory_tab = get_problem_solving_ui(
        llm, tts, stt, default_audio_params, audio_output, name="ML Theory (Beta)", interview_type="ml_theory"
    )
    system_design_tab = get_problem_solving_ui(
        llm, tts, stt, default_audio_params, audio_output, name="System Design (Beta)", interview_type="system_design"
    )
    math_design_tab = get_problem_solving_ui(llm, tts, stt, default_audio_params, audio_output, name="Math (Beta)", interview_type="math")
    sql_design_tab = get_problem_solving_ui(llm, tts, stt, default_audio_params, audio_output, name="SQL (Beta)", interview_type="sql")

    instructions_tab.render()
    coding_tab.render()
    ml_design_tab.render()
    system_design_tab.render()
    ml_theory_tab.render()
    math_design_tab.render()
    sql_design_tab.render()

demo.launch(show_api=False)