from summary_extractor import Extractor
from Tags_Extractor import Tags
from Clauses_Extractor import Clauses
from key_value_extractor import KeyValue
from incorrect_sentence_finder import IncorrectSentenceFinder
from pdftojson import PdftoJson
from headings_extractor import HeadingsExtractor
from incompletesentencefinder import IncompleteSentenceFinder
from aggressive_content_finder import AggressiveContentFinder
from extract_date import ExtractDateAndDuration
from pdftojson import PdftoJson
from ContractGenerator import ContractGenerator
from contract_missing_clausses import ContractMissingClauses
import gradio as gr

def file_output_fn(file_path):
    file_path = file_path.name
    return file_path

#xiaobaiyuan/theme_land  earneleh/paris
with gr.Blocks(css="style.css",theme='ParityError/Interstellar') as demo: 
    gr.HTML("""<center class="darkblue" text-align:center;padding:25px;'>
    <be>
    <h1 style="color:#fff; font-weight:bold; font-size:28px;">
        Contract 
    </h1>
    </center>""")  
    with gr.Row(elem_id = "col-container",scale=0.80):
      with gr.Column(elem_id = "col-container",scale=0.80):
        file_output = gr.File(label="File Status",elem_classes="filenameshow")
    
      with gr.Column(elem_id = "col-container",scale=0.20):  
        upload_button = gr.UploadButton(
            "Browse File",file_types=[".txt", ".pdf", ".doc", ".docx",".json",".csv"],
            elem_classes="uploadbutton")
        summary_btn = gr.Button("Get Summary",elem_classes="uploadbutton")
    
    with gr.Row(elem_id = "col-container",scale=0.60):    
        summary = gr.Textbox(label = "Summary",lines=10)

    with gr.Row(elem_id = "col-container",scale=0.80):
        with gr.TabItem("Tags"):
            with gr.Column(elem_id = "col-container",scale=0.80):
                tags_btn = gr.Button("Tags Extracter")
                tags = gr.Textbox(label = "Tags", lines=10)

        with gr.TabItem("Key Values"):
            with gr.Column(elem_id = "col-container",scale=0.80):
                key_value_btn = gr.Button("Key Value Extractor")
                key_value = gr.Textbox(label = "Key Value",lines=10)


        with gr.TabItem("Clauses"):
            with gr.Column(elem_id = "col-container",scale=0.80):
                clauses_btn = gr.Button("Clauses Extractor")
                clauses = gr.Textbox(label = "Clauses", lines=10)
                
        with gr.TabItem("Headings"):
            with gr.Column(elem_id = "col-container",scale=0.80):  
                heading_btn = gr.Button("Headings Extractor")
                heading = gr.Textbox(label = "Headings", lines=10)
                
        with gr.TabItem("Incorrect_Sentence"): 
            with gr.Column(elem_id = "col-container",scale=0.80):  
                incor_sen_btn = gr.Button("Incorrect Sentence Extractor")
                incorrect_sentence = gr.Textbox(label = "Incorrect Sentence", lines=10)
          
        with gr.TabItem("Incomplete Sentence"):   
            with gr.Column(elem_id = "col-container",scale=0.80):  
                incom_sen_btn = gr.Button("Incomplete Sentence Extractor")
                incomplete_sentence = gr.Textbox(label = "Incomplete Sentence", lines=10)
                
        with gr.TabItem("Aggressive Content"):
            with gr.Column(elem_id = "col-container",scale=0.80):  
                aggres_sen_btn = gr.Button("Aggressive Content Extractor")
                aggressive_sentence = gr.Textbox(label = "Aggressive Content", lines=10)   
                
        with gr.TabItem("Extract Date"):
            with gr.Column(elem_id = "col-container",scale=0.80):  
                extract_date_btn = gr.Button("Extract date")
                extracted_date = gr.Textbox(label = "Extract date", lines=10) 

        with gr.TabItem("Pdf to Json"):
            with gr.Column(elem_id = "col-container",scale=0.80):  
                extract_json_btn = gr.Button("Extract Json from PDF")
                extracted_json = gr.Textbox(label = "Json", lines=10)   

        with gr.TabItem("Contract Generator"):
            with gr.Column(elem_id = "col-container",scale=0.80):  
                prompt = gr.Textbox(label="Prompt")
                generate_btn = gr.Button("Generate")
                contract_box = gr.Textbox(label = "Contract", lines=10)   

        with gr.TabItem("Missing Features"):
            with gr.Column(elem_id = "col-container",scale=0.80):  
                find_missing_features_btn = gr.Button("Find Missing Features")
                Output_box = gr.Textbox(label = "Output", lines=10)   
                
    extractor  = Extractor() 
    upload_button.upload(file_output_fn,upload_button,file_output)
    summary_btn.click( extractor._refine_summary,[upload_button],summary)  

                
    tags_btn.click(Tags.extract_tags,summary,tags)
    key_value_btn.click( KeyValue.extract_key_value_pair,summary,key_value)
    clauses_btn.click(Clauses.get_extracted_clauses,summary,clauses)
    
    ex= HeadingsExtractor()
    heading_btn.click(ex.extract_text,upload_button,heading)

    inf= IncorrectSentenceFinder()
    incor_sen_btn.click(inf.get_incorrect_sentence,upload_button,incorrect_sentence)

    inc= IncompleteSentenceFinder()
    incom_sen_btn.click(inc.get_incomplete_sentence,upload_button,incomplete_sentence)

    agg= AggressiveContentFinder()
    aggres_sen_btn.click(agg.get_aggressive_content,upload_button,aggressive_sentence)    

    date =  ExtractDateAndDuration()
    extract_date_btn.click(date.itrate_each_page,upload_button,extracted_date)

    pdftojson = PdftoJson()
    extract_json_btn.click(pdftojson.extract_text_from_pdf,upload_button,extracted_json)

    contract_gen = ContractGenerator()
    generate_btn.click(contract_gen.generate_contract,prompt,contract_box)

    cont_mis_clauses = ContractMissingClauses()
    find_missing_features_btn.click(cont_mis_clauses.iterate_each_page,upload_button,Output_box)


demo.launch(debug=True)