from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.messages import HumanMessage
from langchain_core.messages import AIMessage
from langchain_community.chat_message_histories import ChatMessageHistory
from pypdf import PdfReader
import os
import gradio as gr
from langchain_openai import AzureChatOpenAI

client = AzureChatOpenAI(
            azure_deployment = "GPT-4o"
        )
def extract_text( pdf_path):
    # creating a pdf reader object
    reader = PdfReader(pdf_path)
    all_text = ""

    for page in reader.pages:
        all_text += page.extract_text()
    return all_text

def get_response( candidate, chat_history, resume, jd):
    
    resume = extract_text(resume.name)
    jd = extract_text(jd.name)

    prompt = ChatPromptTemplate.from_messages(
        [
            (
                "system",
                """Your Task is Perform as intelligent interviewer, Your Task is ask question to the resume's candidate by following candidate Answer.
                  at the end exit with greeting to the candidate.
                **Ask question follow up on the candidate response. get chat history.**
                """,
            ),
            MessagesPlaceholder(variable_name="messages"),
        ]
    )

    chain = prompt | client  

    # chat_histroy_prompt = chat_history

    answer = chain.invoke(
        {
            "messages": [
                HumanMessage(
                    content=f" job description :{jd}\n Resume :{resume}"
                ),
                AIMessage(content=f"""Perform as intelligent interviewer, Your Task is ask question to the resume's candidate by following candidate Answer.
                 chat history : {chat_history}"""),
                HumanMessage(content=candidate),
            ],
        }
    )
    # print("INTERVIEWER :", answer.content)
    # chat_history.append({"candidate":candidate,"interviewer":answer.content })

    result = answer.content
    chat_history.append((candidate, result))
    print("chat_history", chat_history)
    return "", chat_history

def gradio_interface() -> None:
    """Create a Gradio interface for the chatbot."""
    with gr.Blocks(css = "style.css" ,theme="shivi/calm_seafoam") as demo:

        gr.HTML("""<center class="darkblue" text-align:center;padding:30px;'></center>
                <center>
                <br><h1 style="color:#006e49">Screening Assistant Chatbot</h1></center>""")

        with gr.Row():
            with gr.Column(scale=0.50):
                resume = gr.File(label="Resume", elem_classes="resume")
            with gr.Column(scale=0.50):
                jd = gr.File(label="Job Description", elem_classes="jd")

        with gr.Row():
            with gr.Column():
                chatbot = gr.Chatbot() 
                
        with gr.Row():                
            with gr.Column(scale=0.80):
                msg = gr.Textbox(label="Question", show_label=False, placeholder="Question...")
            with gr.Column(scale=0.20):
                clear = gr.ClearButton([msg, chatbot], elem_classes="clear")

        msg.submit(get_response, [msg, chatbot, resume, jd], [msg, chatbot])

    demo.launch(debug=True, share=True)   

gradio_interface()