import gradio as gr
from PyPDF2 import PdfReader
import os
from docx import Document as DocxDocument
from gradio_client import Client
from IPython.display import display
from IPython.display import Markdown

custom_css = """
#md {
    height: 450px;  
    font-size: 35px;
    background: black;
    padding: 20px;
    padding-top: 40px;
    color: white;
    border: 1 px solid #383838;
}
"""

def routing(message):
    client = Client("mgokg/SemanticRouting")
    result = client.predict(
		prompt=f"{message}",
		api_name="/predict"
    )
    return result

def mitteilung(input):
    client = Client("mgokg/Gemini2.0")
    result = client.predict(
		input_text=f"{input}",
		api_name="/generate_press_release"
    )
    return result

   
def process_pdf(file):
    # Read the PDF content
    pdf_reader = PdfReader(file.name)
    text = ""
    for page in pdf_reader.pages:
        text += page.extract_text()
    return text

def process_file(file):
    file_extension = file.name.split(".")[-1].lower()

    if file_extension == 'pdf':
        ocr_text = process_pdf(file)
        result = mitteilung(ocr_text)
        #display(Markdown(result))
        return result
        return ocr_text 

    elif file_extension == 'docx':
        docx_document = DocxDocument(file.name)
        text = ""
        for paragraph in docx_document.paragraphs:
            text += paragraph.text + "\n"

        result = mitteilung(text)
        #display(Markdown(result))
        return result
        return text
    #return [Document(text=text)]

with gr.Blocks(css=custom_css) as demo:
    gr.Markdown("### File upload", elem_classes="tab-header")
    with gr.Row():
        textoutput = gr.Markdown(label="Antwort", elem_id="md", value="#")
    with gr.Row():    
        text_output = gr.Textbox(label="")
    with gr.Row():    
        file_input = gr.File(label="Wähle eine PDF-Datei aus", type="filepath")
    with gr.Row():
        submit_button = gr.Button("upload")
    submit_button.click(process_file, inputs=file_input, outputs=[textoutput,text_output])
    
demo.launch(show_error=True)