import gradio as gr
from gradio_pdf import PDF

with gr.Blocks() as demo:
    PDF(interactive=True)


demo.launch()
# import gradio as gr
# from _app import demo as app
# import os

# _docs = {'PDF': {'description': 'A base class for defining methods that all input/output components should have.', 'members': {'__init__': {'value': {'type': 'Any', 'default': 'None', 'description': None}, 'height': {'type': 'int | None', 'default': 'None', 'description': None}, 'label': {'type': 'str | None', 'default': 'None', 'description': None}, 'info': {'type': 'str | None', 'default': 'None', 'description': None}, 'show_label': {'type': 'bool | None', 'default': 'None', 'description': None}, 'container': {'type': 'bool', 'default': 'True', 'description': None}, 'scale': {'type': 'int | None', 'default': 'None', 'description': None}, 'min_width': {'type': 'int | None', 'default': 'None', 'description': None}, 'interactive': {'type': 'bool | None', 'default': 'None', 'description': None}, 'visible': {'type': 'bool', 'default': 'True', 'description': None}, 'elem_id': {'type': 'str | None', 'default': 'None', 'description': None}, 'elem_classes': {'type': 'list[str] | str | None', 'default': 'None', 'description': None}, 'render': {'type': 'bool', 'default': 'True', 'description': None}, 'load_fn': {'type': 'Callable[..., Any] | None', 'default': 'None', 'description': None}, 'every': {'type': 'float | None', 'default': 'None', 'description': None}}, 'postprocess': {'value': {'type': 'str | None', 'description': None}}, 'preprocess': {'return': {'type': 'str', 'description': None}, 'value': None}}, 'events': {'change': {'type': None, 'default': None, 'description': ''}, 'upload': {'type': None, 'default': None, 'description': ''}}}, '__meta__': {'additional_interfaces': {}, 'user_fn_refs': {'PDF': []}}}
    
# abs_path = os.path.join(os.path.dirname(__file__), "css.css")

# with gr.Blocks(
#     css=abs_path,
#     theme=gr.themes.Default(
#         font_mono=[
#             gr.themes.GoogleFont("Inconsolata"),
#             "monospace",
#         ],
#     ),
# ) as demo:
#     gr.Markdown(
# """
# # `gradio_pdf`

# <div style="display: flex; gap: 7px;">
# <a href="https://pypi.org/project/gradio_pdf/" target="_blank"><img alt="PyPI - Version" src="https://img.shields.io/pypi/v/gradio_pdf"></a> <a href="https://github.com/freddyaboulton/gradio-pdf/issues" target="_blank"><img alt="Static Badge" src="https://img.shields.io/badge/Issues-white?logo=github&logoColor=black"></a> <a href="https://huggingface.co/spaces/freddyaboulton/gradio_pdf/discussions" target="_blank"><img alt="Static Badge" src="https://img.shields.io/badge/%F0%9F%A4%97%20Discuss-%23097EFF?style=flat&logoColor=black"></a>
# </div>

# Easily display PDFs in Gradio
# """, elem_classes=["md-custom"], header_links=True)
#     app.render()
#     gr.Markdown(
# """
# ## Installation

# ```bash
# pip install gradio_pdf
# ```

# ## Usage

# ```python

# import gradio as gr
# from gradio_pdf import PDF
# from pdf2image import convert_from_path
# from transformers import pipeline
# from pathlib import Path

# dir_ = Path(__file__).parent

# p = pipeline(
#     "document-question-answering",
#     model="impira/layoutlm-document-qa",
# )

# def qa(question: str, doc: str) -> str:
#     img = convert_from_path(doc)[0]
#     output = p(img, question)
#     return sorted(output, key=lambda x: x["score"], reverse=True)[0]['answer']


# demo = gr.Interface(
#     qa,
#     [gr.Textbox(label="Question"), PDF(label="Document")],
#     gr.Textbox(),
#     examples=[["What is the total gross worth?", str(dir_ / "invoice_2.pdf")],
#               ["Whos is being invoiced?", str(dir_ / "sample_invoice.pdf")]]
# )

# if __name__ == "__main__":
#     demo.launch()

# ```
# """, elem_classes=["md-custom"], header_links=True)


#     gr.Markdown("""
# ## `PDF`

# ### Initialization
# """, elem_classes=["md-custom"], header_links=True)

#     gr.ParamViewer(value=_docs["PDF"]["members"]["__init__"], linkify=[])


#     gr.Markdown("### Events")
#     gr.ParamViewer(value=_docs["PDF"]["events"], linkify=['Event'])




#     gr.Markdown("""

# ### User function

# The impact on the users predict function varies depending on whether the component is used as an input or output for an event (or both).

# - When used as an Input, the component only impacts the input signature of the user function. 
# - When used as an output, the component only impacts the return signature of the user function. 

# The code snippet below is accurate in cases where the component is used as both an input and an output.



#  ```python
# def predict(
#     value: str
# ) -> str | None:
#     return value
# ```
# """, elem_classes=["md-custom", "PDF-user-fn"], header_links=True)




#     demo.load(None, js=r"""function() {
#     const refs = {};
#     const user_fn_refs = {
#           PDF: [], };
#     requestAnimationFrame(() => {

#         Object.entries(user_fn_refs).forEach(([key, refs]) => {
#             if (refs.length > 0) {
#                 const el = document.querySelector(`.${key}-user-fn`);
#                 if (!el) return;
#                 refs.forEach(ref => {
#                     el.innerHTML = el.innerHTML.replace(
#                         new RegExp("\\b"+ref+"\\b", "g"),
#                         `<a href="#h-${ref.toLowerCase()}">${ref}</a>`
#                     );
#                 })
#             }
#         })
        
#         Object.entries(refs).forEach(([key, refs]) => {
#             if (refs.length > 0) {
#                 const el = document.querySelector(`.${key}`);
#                 if (!el) return;
#                 refs.forEach(ref => {
#                     el.innerHTML = el.innerHTML.replace(
#                         new RegExp("\\b"+ref+"\\b", "g"),
#                         `<a href="#h-${ref.toLowerCase()}">${ref}</a>`
#                     );
#                 })
#             }
#         })
#     })
# }

# """)

# demo.launch()
