# import os
# import gradio as gr
# from gradio_molecule3d import Molecule3D
# import spaces
# import subprocess
# import glob


# # directory to store cached outputs
# CACHE_DIR = "gradio_cached_examples"


# reps =    [
#     {
#       "model": 0,
#       "chain": "",
#       "resname": "",
#       "style": "stick",
#       "color": "whiteCarbon",
#       "residue_range": "",
#       "around": 0,
#       "byres": False,
#       "visible": False
#     }
#   ]
# # Ensure the cache directory exists
# os.makedirs(CACHE_DIR, exist_ok=True)

# # Define example files and precomputed outputs
# example_fasta_files = [
#     f"cache_examples/boltz_0.fasta",
#     f"cache_examples/Armadillo_6.fasta",
#     f"cache_examples/Covid_3.fasta",
#     f"cache_examples/Malaria_2.fasta",
#     f"cache_examples/MITOCHONDRIAL_9.fasta",
#     f"cache_examples/Monkeypox_4.fasta",
#     f"cache_examples/Plasmodium_1.fasta",
#     f"cache_examples/PROTOCADHERIN_8.fasta",
#     f"cache_examples/Vault_5.fasta",
#     f"cache_examples/Zipper_7.fasta",
# ]

# # matching `.pdb` files in the `CACHE_DIR`
# example_outputs = [
#     os.path.join(CACHE_DIR, os.path.basename(fasta_file).replace(".fasta", ".pdb"))
#     for fasta_file in example_fasta_files
# ]

# # must load cached outputs
# def load_cached_example_outputs(fasta_file: str) -> str:
#     # Find the corresponding `.pdb` file
#     pdb_file = os.path.basename(fasta_file).replace(".fasta", ".pdb")
#     cached_pdb_path = os.path.join(CACHE_DIR, pdb_file)
#     if os.path.exists(cached_pdb_path):
#         return cached_pdb_path
#     else:
#         raise FileNotFoundError(f"Cached output not found for {pdb_file}")

# # handle example click
# def on_example_click(fasta_file: str) -> str:
#     return load_cached_example_outputs(fasta_file)

# # run predictions
# @spaces.GPU(duration=120)
# def predict(data,
#             accelerator="gpu", sampling_steps=50,
#             diffusion_samples=1):

#     print("Arguments passed to `predict` function:")
#     print(f"  data: {data}")
#     print(f"  accelerator: {accelerator}")
#     print(f"  sampling_steps: {sampling_steps}")
#     print(f"  diffusion_samples: {diffusion_samples}")
#     # we construct the base command
#     command = [
#         "boltz", "predict",
#         "--out_dir", "./",
#         "--accelerator", accelerator,
#         "--sampling_steps", str(sampling_steps),
#         "--diffusion_samples", str(diffusion_samples),
#         "--output_format", "pdb",
#     ]
#     command.extend(["--checkpoint", "./ckpt/boltz1.ckpt"])
#     command.append(data)
#     result = subprocess.run(command, capture_output=True, text=True)
#     if result.returncode == 0:
#         print("Prediction completed successfully...!")
#         print(f"Output saved to: {out_dir}")
#     else:
#         print("Prediction failed :(")
#         print("Error:", result.stderr)

# def run_prediction(input_file, accelerator, sampling_steps,
#                    diffusion_samples):
#     data = input_file.name
#     print("the data : ", data)
#     predict(
#         data=data,
#         accelerator=accelerator,
#         sampling_steps=sampling_steps,
#         diffusion_samples=diffusion_samples
#     )

#     # search for the latest .pdb file in the predictions folder
#     out_dir = "./"
#     search_path = os.path.join(out_dir, "boltz_results*/predictions/**/*.pdb")
#     pdb_files = glob.glob(search_path, recursive=True)
    
#     if not pdb_files:
#         print("No .pdb files found in the predictions folder.")
#         return None

#     # some manual logic
#     # get the latest .pdb file based on modification time
#     latest_pdb_file = max(pdb_files, key=os.path.getmtime)
#     return latest_pdb_file


# with gr.Blocks() as demo:
#     gr.Markdown("# 🔬 Boltz-1: Democratizing Biomolecular Interaction Modeling 🧬")

#     with gr.Row():
#         with gr.Column(scale=1):
#             inp = gr.File(label="Upload a .fasta File", file_types=[".fasta"])

#             with gr.Accordion("Advanced Settings", open=False):
#                 accelerator = gr.Radio(choices=["gpu", "cpu"], value="gpu", label="Accelerator")
#                 sampling_steps = gr.Slider(minimum=1, maximum=500, value=50, step=1, label="Sampling Steps")
#                 diffusion_samples = gr.Slider(minimum=1, maximum=10, value=1, step=1, label="Diffusion Samples")
#             btn = gr.Button("Predict")
            
#         with gr.Column(scale=3):
#             out = Molecule3D(label="Generated Molecule", reps=reps)

        

#     btn.click(
#         run_prediction,
#         inputs=[inp, accelerator, sampling_steps, diffusion_samples],
#         outputs=out
#     )
#     gr.Examples(
#                 examples=[[fasta_file] for fasta_file in example_fasta_files],
#                 inputs=[inp],
#                 outputs=out, 
#                 fn=lambda fasta_file: on_example_click(fasta_file),
#                 cache_examples=True
#             )

    

# if __name__ == "__main__":
#     demo.launch(share=True, debug=True)

import gradio as gr
import spaces

@spaces.GPU()
def greet(name):
    return "Hello " + name + "!!"

demo = gr.Interface(fn=greet, inputs="text", outputs="text")
demo.launch()