import numpy as np
import gradio as gr

# 生成一个文生图的gradio界面


def mock_img(text: str):
    return [
        {
            "caption": "科学家们使用克隆技术",
            "url": "https://image.limaogushi.com/file/picture-books/image/f2/d8/7ae32095-6e8c-4328-a218-6fe57e49bbc2.jpg",
        },
        {
            "caption": "克隆羊多利的诞生",
            "url": "https://image.limaogushi.com/file/picture-books/image/97/98/75cf0a7b-cb27-44b3-beae-7ab24488ff8c.jpg",
        },
    ]


def mock_story(query: str):
    return """小朋友,你听说过“克隆”这个词吗?让我来给你讲一个有趣的故事吧!

有一天,科学家们想出了一个非常神奇的方法,可以让一个生命体“复制”出另一个一模一样的生命体,这个方法就叫做“克隆”。你可以把“克隆”想象成是一台神奇的复印机,但是这台复印机不是复印纸张,而是复印生命哦!

1997年的时候,科学家们用这种方法成功地“复印”出了一只名叫多利的绵羊。你知道吗,多利羊并没有爸爸,它是由一只母羊的细胞复制而来的。这就像是我们从电脑上复制一个文件一样,只不过这次我们复制的是一个活生生的羊!

克隆羊多利的诞生,就像是打开了一扇新的大门,让人们看到了生命的奇妙和科学的无限可能。从此以后,人们开始更加关注和研究克隆技术,希望用它来帮助我们解决更多的问题。

所以,克隆羊就是通过克隆技术创造出来的一只羊,它没有父亲,只有母亲,是科学家们用神奇的“生命复印机”复制出来的哦!"""


from kg import story_to_imgs


def generate_image(story):

    res = story_to_imgs(story)
    md = ""
    # 改为markdown
    for i in range(len(res)):
        md += f"{res[i]['caption']}\n![{res[i]['caption']}]({res[i]['url']})\n\n"
    return md


from answerQuestions import generateStory


def generate_story(query):

    return generateStory(query)



with gr.Blocks() as demo:
    gr.Markdown("# 绘本生成器")

    with gr.Row():
        with gr.Column():
            input_text = gr.Textbox(label="输入")
            with gr.Row():
                clear_btn = gr.Button("清空")
                story_btn = gr.Button("生成故事", variant="primary")
            with gr.Row():
                img_btn = gr.Button("生成绘本", variant="primary")
        with gr.Column():
            story_output = gr.Textbox(label="生成的故事", interactive=False, lines=10)
            story_btn.click(generate_story, inputs=input_text, outputs=story_output)
        with gr.Column():
            gr.Markdown("## 生成的绘本")
            img_output = gr.Markdown(label="生成的绘本")
            img_btn.click(generate_image, inputs=story_output, outputs=img_output)

        clear_btn.click(
            lambda x: [
                gr.update(value=""),
                gr.update(value=""),
                gr.update(value=""),
            ],
            None,
            [input_text, story_output, img_output],
        )

if __name__ == "__main__":
    demo.launch()