from os import pipe
import re
import gradio as gr
from functions.punctuation import punctuate
from functions.model_infer import predict_from_document
from functions.convert_time import match_mask_and_transcript


title = "sponsoredBye - never listen to sponsors again"
description = "Sponsored sections in videos are annoying and take up a lot of time. Improve your YouTube watching experience, by filling in the youtube url and figure out what segments to skip."
article = "Check out [the original Rick and Morty Bot](https://huggingface.co/spaces/kingabzpro/Rick_and_Morty_Bot) that this demo is based off of."


def pipeline(video_url):
    try:
        video_id = video_url.split("?v=")[-1]
        punctuated_text, transcript = punctuate(video_id)
        sentences = re.split(r"[\.\!\?]\s", punctuated_text)
        classification, probs = predict_from_document(sentences)
        #    return punctuated_text
        times, timestamps = match_mask_and_transcript(sentences, transcript, classification)
        return [{"begin": time[0], "end": time[1]} for time in times]
    except Exception as e:
        return {"error": f"{e}"}
    #    return [
    #        {
    #            "start": "12:05",
    #            "end": "12:52",
    #            "classification": str(classification),
    #            "probabilities": probs,
    #            "times": times,
    #            "timestamps": timestamps,
    #        }
    #    ]


# print(pipeline("VL5M5ZihJK4"))
demo = gr.Interface(
    fn=pipeline,
    title=title,
    description=description,
    inputs="text",
    #    outputs=gr.Label(num_top_classes=3),
    outputs="json",
    examples=[
        "https://www.youtube.com/watch?v=UjtOGPJ0URM",
        "https://www.youtube.com/watch?v=TrZyuCh9df0",
    ],
)
demo.launch(share=True)