"""See https://huggingface.co/spaces/Gradio-Blocks/Story-to-video/blob/main/app.py."""
import gradio as gr
import base64
import io
from logzero import logger
from PIL import Image  # opencv-python
from random import choice

# from PIL import Image
# from transformers import AutoTokenizer, AutoModelForSeq2SeqLM,pipeline
# import requests
# import torch

image_gen = gr.Interface.load("spaces/multimodalart/latentdiffusion")


def generate_images(phrase: str, steps: int = 125):
    if not phrase.strip():
        phrase = choice(["an apple", "a cat", "blue moon", "metaverse"])
    generated_text = phrase
    # steps = 125
    width = 256
    height = 256
    num_images = 4
    num_images = 1
    diversity = 6

    try:
        image_bytes = image_gen(generated_text, steps, width, height, num_images, diversity)
    except Exception as exc:
        logger.error(exc)
        return img, f"phrase: {phrase}, errors: str(exc). Try again."

    # Algo from spaces/Gradio-Blocks/latent_gpt2_story/blob/main/app.py
    # generated_images = []

    img = None
    err_msg = phrase
    for image in image_bytes[1]:
        image_str = image[0]
        try:
            image_str = image_str.replace("data:image/png;base64,", "")
        except Exception as exc:
            logger.error(exc)
            err_msg = str(exc)
            return None, f"Error: {err_msg}. Try again."
        decoded_bytes = base64.decodebytes(bytes(image_str, "utf-8"))
        img = Image.open(io.BytesIO(decoded_bytes))

        # generated_images.append(img)

    # return generated_images

    return img, err_msg


examples = [["an apple", 125], ["Donald Trump", 125]]

inputs = [
    # "text",
    gr.Text(value="a dog with a funny hat"),
    gr.Slider(minimum=2, maximum=500, value=115, step=5),
]

iface = gr.Interface(
    generate_images,
    inputs,
    # ["image", gr.Text(value="", label="phrase")],
    [gr.Image(label=""), gr.Text(value="", label="phrase")],
    examples=examples,
)

iface.launch(enable_queue=True)