import gradio as gr

from utils import Test



title = "Хто ти із Синтезу?"
description = "Визначте, на кого з легендарної команди Синтез при Свічках (СпС) Ви найбільше схожі"
info = "Пройдіть тест до кінця"



# Define your list of questions and answers
test = Test()


def question_interface(question_state, answer):
    if (question_state["value"] == -1):
        question_state["value"] += 1
    elif (answer is not None):
        question_state["value"] += 1
        question_state["responses"].append(answer)
    current_question_index = question_state["value"]

    # Check if all questions have been answered
    if current_question_index == len(test):
        # Show all responses
        answer_ids = test.convert_to_answer_ids(question_state["responses"])
        best_id = test.select_best(answer_ids)
        radio = gr.Radio.update(choices = [], value = None)
        name = f"Вітаємо, Ви {test.full_names[best_id]}!"
        title = test.titles[best_id]
        image_path = test.get_photos_path(best_id)
        return test.zero_state, name, radio, title, image_path

    # Display the current question
    question = test.get_question(current_question_index)

    # Create an input component for the answer
    answers = test.get_answers(current_question_index)
    radio = gr.Radio.update(choices = answers, value = None)

    image_description = test.get_description(current_question_index)
    image_path = test.get_image_path(current_question_index)

    return question_state, question, radio, image_description, image_path






with gr.Blocks() as blocks:
    question_state = gr.State(value = test.zero_state)
    gr.Markdown("<h1 style='text-align: center; margin-bottom: 1rem'>"
                + title
                + "</h1>")
    gr.Markdown(description)
    with gr.Row():
        with gr.Column():
            textbox = gr.Textbox(
                label="Запитання",
                value="Натисніть ВПЕРЕД для того щоб розпочати тест",
                interactive=False,
            )
            radio = gr.Radio(
                label="Варіанти відповіді",
                choices=[],
                #value=default_lang,
                #type="index",
                interactive=True,
            )
            with gr.Row():
                submit = gr.Button("ВПЕРЕД", variant="primary", interactive=True)
        with gr.Column():
            result = gr.Textbox(label="Як би відповів СпС?", interactive=False)
            resultImage = gr.Image("./emblem.png", label="Image", interactive=False, height=500)
    gr.Markdown(info)
    # gr.Markdown("<center>"
    #             +f'<img src={badge} alt="visitors badge"/>'
    #             +"</center>")

    # actions
    submit.click(
        question_interface,
        [question_state, radio],
        [question_state, textbox, radio, result, resultImage],
    )


blocks.launch()