import gradio as gr
import random
import json
import os

def fake_func():
    return "Hello There"

def xray_model(diseases, img):
    return {disease: random.random() for disease in diseases}

def ct_model(diseases, img):
    return {disease: 0.1 for disease in diseases}

with gr.Blocks() as demo:
    gr.Markdown(
        """
    # Detect Disease From Scan
    With this model you can lorem ipsum
    - ipsum 1
    - ipsum 2
    """
    )
    disease = gr.CheckboxGroup(
        choices=[["Covid", "Covid"], ["Malaria", "Malaria"], ["Lung Cancer", "Lung Cancer"]], label="Disease to Scan For"
    )

    with gr.Tabs():
        with gr.TabItem("X-ray"):
            with gr.Row():
                xray_scan = gr.Image()
                xray_results = gr.JSON()
            xray_run = gr.Button("Run")
            xray_run.click(
                xray_model, inputs=[disease, xray_scan], outputs=xray_results
            )

        with gr.TabItem("CT Scan"):
            with gr.Row():
                ct_scan = gr.Image()
                ct_results = gr.JSON()
            ct_run = gr.Button("Run")
            ct_run.click(
                ct_model, inputs=[disease, ct_scan], outputs=ct_results
            )
    textbox = gr.Textbox()


gr.context.Context.id = 100

with gr.Blocks() as demo2:
    gr.Markdown(
        """
    # Detect Disease From Scan
    With this model you can lorem ipsum
    - ipsum 1
    - ipsum 2
    """
    )
    disease = gr.CheckboxGroup(
        choices=[["Covid", "Covid"], ["Malaria", "Malaria"], ["Lung Cancer", "Lung Cancer"]], label="Disease to Scan For"
    )

    with gr.Tabs():
        with gr.TabItem("X-ray"):
            with gr.Row():
                xray_scan = gr.Image()
                xray_results = gr.JSON()
            xray_run = gr.Button("Run")
            xray_run.click(
                xray_model, inputs=[disease, xray_scan], outputs=xray_results
            )

        with gr.TabItem("CT Scan"):
            with gr.Row():
                ct_scan = gr.Image()
                ct_results = gr.JSON()
            ct_run = gr.Button("Run")
            ct_run.click(
                ct_model, inputs=[disease, ct_scan], outputs=ct_results
            )
    textbox = gr.Textbox()

with gr.Blocks() as demo3:
    demo.render()
    t = gr.Textbox()
    demo3.load(fake_func, [], [t])

config = demo.get_config_file()
config2 = demo2.get_config_file()
config3 = demo3.get_config_file()

json_file_path = "../test/test_files/xray_config.json"
json_file_path2 = "../test/test_files/xray_config_diff_ids.json"
json_file_path3 = "../test/test_files/xray_config_wrong.json"

for c, j in zip([config, config2, config3], [json_file_path, json_file_path2, json_file_path3]):
    assert os.path.exists(j), f"{j} does not exist"
    with open(j, "w") as fp:
        json.dump(c, fp, indent=2)