import os
import time
os.system("wget https://raw.githubusercontent.com/Weyaxi/scrape-open-llm-leaderboard/main/openllm.py")
from huggingface_hub import HfApi, HfFileSystem
import time
import pandas as pd
import threading
import gradio as gr
from gradio_space_ci import enable_space_ci
from functions import commit

enable_space_ci()

HF_TOKEN = os.getenv('HF_TOKEN')
BOT_HF_TOKEN = os.getenv('BOT_HF_TOKEN')


api = HfApi()
fs = HfFileSystem()

def refresh(how_much=43200): # default to 12 hour
  time.sleep(how_much)
  try:
      api.restart_space(repo_id="Weyaxi/leaderboard-results-to-modelcard")
  except Exception as e:
      print(f"Error while scraping leaderboard, trying again... {e}")
      refresh(600) # 10 minutes if any error happens

gradio_title="🧐 Open LLM Leaderboard Results PR Opener"
gradio_desc= """🎯 This tool's aim is to provide [Open LLM Leaderboard](https://huggingface.co/spaces/open-llm-leaderboard/open_llm_leaderboard) results in the model card.

## 💭 What Does This Tool Do:

- This tool adds the [Open LLM Leaderboard](https://huggingface.co/spaces/open-llm-leaderboard/open_llm_leaderboard) result of your model at the end of your model card.

- This tool also adds evaluation results as your model's metadata to showcase the evaluation results as a widget.

## 🛠️ Backend

The leaderboard's backend mainly runs on the [Hugging Face Hub API](https://huggingface.co/docs/huggingface_hub/v0.5.1/en/package_reference/hf_api).

## 🤝 Acknowledgements

- Special thanks to [Clémentine Fourrier (clefourrier)](https://huggingface.co/clefourrier) for her help and contributions to the code.

- Special thanks to [Lucain Pouget (Wauplin)](https://huggingface.co/Wauplin) for assisting with the [Hugging Face Hub API](https://huggingface.co/docs/huggingface_hub/v0.5.1/en/package_reference/hf_api).
"""

with gr.Blocks() as demo:
    gr.HTML(f"""<h1 align="center" id="space-title">{gradio_title}</h1>""")
    gr.HTML(f"""<h1 align="center" id="space-title" style="font-weight: bold; font-size: 40px; color: red;">DON'T SPAM MODELS!</h1>""")
    gr.HTML(f"""<h1 align="center" id="space-title" style="font-weight: bold; font-size: 25px; color: red;">I understand why you are angry, but spamming won't change anything!</h1>""")
    
    gr.Markdown(gradio_desc)

    with gr.Row(equal_height=False):
        with gr.Column():
            model_id = gr.Textbox(label="Model ID or URL", lines=1)
            gr.LoginButton()

        with gr.Column():
            output = gr.Textbox(label="Output", lines=1)
            gr.LogoutButton()
        
    submit_btn = gr.Button("Submit", variant="primary")   
    
    def validate_model_id(input_id):
        if "mattshumer/" in input_id:
            gr.Error("DON'T, DON'T SPAM THAT MODELS")
            return "DON'T, DON'T SPAM THAT MODELS"
        else:
            #return gr.OAuthToken
            return commit(input_id)

    submit_btn.click(validate_model_id, model_id, output)

threading.Thread(target=refresh).start()
demo.launch()