import gradio as gr
import time
from src.constructor import generate_presentation 
from src.prompt_configs import en_gigachat_config, ru_gigachat_config
from src.gigachat import giga_generate
# from src.kandinsky import api_k31_generate
from src.kandinsky import generate_image
from src.font import Font

logs_dir = "logs"
fonts_dir = "fonts"

def create_presentation(description: str, slides_num: int, language: str, num_inference_steps: int, image_res: str):
    # Select the appropriate prompt configuration based on the selected language
    if language == "English":
        prompt_config = en_gigachat_config
    elif language == "Русский":
        prompt_config = ru_gigachat_config
    else: 
        # set default to prevent interruptions in unexpected scenario
        prompt_config = en_gigachat_config
        
    font = Font(fonts_dir)
    font.set_random_font() 
    
    output_dir = f'{logs_dir}/{int(time.time())}'

    if image_res == "192x336 & 256x256":
        image_size_coef = 0.25
    elif image_res == "384x672 & 512x512":
        image_size_coef = 0.5
    elif image_res == "576x1008 & 768x768":
        image_size_coef = 0.75
    else:
        image_size_coef = 1.0
    
    generate_presentation(
        llm_generate=giga_generate, 
        # generate_image=api_k31_generate,
        generate_image=generate_image,
        prompt_config=prompt_config, 
        description=description,
        slides_num=slides_num,
        font=font,
        output_dir=output_dir,
        num_inference_steps=num_inference_steps,
        image_size_coef=image_size_coef
    )

    filename = f'{output_dir}/presentation.pptx'
    
    return filename

# Updated examples to include language selection
examples = [

    ["How to explain to a cat that he is not in charge of the house: a study of owners", 6, "English"],
    ["Как объяснить коту, что он не главный в доме: исследование владельцев", 6, "Русский"],
    ["Basic concepts of economics", 7, "English"],
    ["Базовые понятия экономики", 7, "Русский"],
    ["Climate change", 6, "English"],
    ["Изменение климата", 6, "Русский"],
    ["The Secret Life of an Office Printer: Why It Prints when You're Not Looking", 6, "English"],
    ["Тайная жизнь офисного принтера: почему он печатает, когда ты не смотришь", 6, "Русский"],
    ["Artificial intelligence", 5, "English"],
    ["Искусственный интеллект", 5, "Русский"],
    ["Space exploration", 7, "English"],
    ["Космические исследования", 7, "Русский"],
    ["The future of renewable energy", 7, "English"],
    ["Будущее возобновляемой энергетики", 7, "Русский"],
    ["5 ways to understand that you are in IT, so that the slides are about bugs and caffeine", 6, "English"],
    ["5 способов понять, что ты в IT, чтобы в слайдах было про баги и кофеин", 6, "Русский"],
    ["The history of art movements", 6, "English"],
    ["История художественных движений", 6, "Русский"],
    ["The impact of social media", 6, "English"],
    ["Влияние социальных сетей", 6, "Русский"],
    ["Sustainable urban planning", 7, "English"],
    ["Устойчивое градостроительство", 7, "Русский"],
    ["Новшества в области медицинских технологий", 7, "Русский"],
    ["Innovations in healthcare technology", 7, "English"],
    ["Глобальные экономические тенденции", 5, "Русский"],
    ["Global economic trends", 5, "English"],
    ["Психология потребительского поведения", 6, "Русский"],
    ["The psychology of consumer behavior", 6, "English"],
    ["Преимущества осознанности и медитации", 7, "Русский"],
    ["The benefits of mindfulness and meditation", 7, "English"],
    ["Достижения в области автономных транспортных средств", 7, "Русский"],
    ["Advancements in autonomous vehicles", 7, "English"],
    ["Влияние изменений климатической политики", 5, "Русский"],
    ["The impact of climate policy changes", 5, "English"],
]

iface = gr.Interface(
    fn=create_presentation,
    inputs=[
        gr.Textbox(
            label="Presentation Description", 
            placeholder="Enter the description for the presentation..."
        ),
        gr.Dropdown(
            label="Number of slides",
            choices=range(1, 8),
            value=5
        ),
        gr.Dropdown(
            label="Language",
            choices=["English", "Русский"],
            value="English"
        ),
        gr.Slider(
            label="Number of diffusion steps",
            minimum=2,
            maximum=50,
            step=1,
            value=50, 
        ),
        # gr.Slider(
        #     label="scaling factor for image reduction",
        #     minimum=0.25,
        #     maximum=1.0,
        #     step=0.05,
        #     value=1.0, 
        # )
        gr.Dropdown(
            label="Image resolution",
            choices=["192x336 & 256x256", "384x672 & 512x512", "576x1008 & 768x768", "768x1344 & 1024x1024"],
            value="768x1344 & 1024x1024"
        )
    ],
    outputs=gr.File(
        label="Download Presentation"
    ),
    title="Presentation Generator",
    description="Generate a presentation based on the provided description and selected language. Click the button to download the presentation.",
    css="footer {visibility: hidden}",
    allow_flagging="never",  
    examples=examples  
)

iface.launch()