import gradio as gr
from huggingface_hub import HfApi
from matchmaking import *
from background_task import init_matchmaking, get_elo_data
from apscheduler.schedulers.background import BackgroundScheduler
from utils import *

matchmaking = Matchmaking()
api = HfApi()

# launch
scheduler = BackgroundScheduler()
scheduler.add_job(func=init_matchmaking, trigger="interval", seconds=300)
scheduler.start()


def update_elos():
    matchmaking.read_history()
    matchmaking.compute_elo()
    matchmaking.save_elo_data()


with gr.Blocks() as block:
    gr.Markdown(f"""
        # 🏆 AI vs. AI SoccerTwos Leaderboard ⚽ 

        In this leaderboard, you can find the ELO score and the rank of your trained model for the SoccerTwos environment.

        If you want to know more about a model, just **copy the username and model and paste them into the search bar**.

        👀 To visualize your agents competing check this demo: https://huggingface.co/spaces/unity/ML-Agents-SoccerTwos

        🤖 For more information about this AI vs. AI challenge and to participate? [Check this](https://huggingface.co/deep-rl-course/unit7)
        """)
    with gr.Row():
        output = gr.components.Dataframe(
            value=get_elo_data,
            headers=["Ranking 🏆", "User 🤗", "Model id 🤖", "ELO 🚀", "Games played 🎮"],
            datatype=["number", "markdown", "markdown", "number", "number"]
        )
    with gr.Row():
        refresh = gr.Button("Refresh")
        refresh.click(get_elo_data, inputs=[], outputs=output)

block.launch()