import gradio as gr
import yaml
from gradio.themes.utils import colors


bfh_blue = colors.Color(
    c50="#edf0f2",
    c100="#dbe0e5",
    c200="#b7c1cb",
    c300="#93a2b1",
    c400="#6f8397",
    c500="#4b647d",
    c600="#3c5064",
    c700="#2d3c4b",
    c800="#1e2832",
    c900="#0f1419",
    c950="#070a0c",
    name="bfh_blue",
)

bfh_yellow = colors.Color(
    c50="#fff9e6",
    c100="#fef3cc",
    c200="#fde799",
    c300="#fcdb66",
    c400="#fbcf33",
    c500="#fac300",
    c600="#c89c00",
    c700="#967500",
    c800="#644e00",
    c900="#322700",
    c950="#191300",
    name="bfh_yellow",
)


class BFHTheme(gr.themes.Base):
    def __init__(
        self,
    ):
        super().__init__(
            primary_hue=bfh_blue,
            secondary_hue=bfh_yellow,
        )

class InterfaceCreator:
    @staticmethod
    def read_yaml(path):
        with open(path) as f:
            return yaml.safe_load(f)
    @classmethod
    def from_yaml(cls, path):
        """Initializes Interface from YAML file."""
        content_dict = cls.read_yaml(path)
        return cls.create_interface(**content_dict)

    @classmethod
    def create_interface(cls, name, title=None, description=None, examples=None):
        """Creates Gradio-Element containing an interface."""
        interface = gr.load(
            name,
            title=None,
            description=description,
            examples=examples,
            theme=BFHTheme(),
        )
        return interface


if __name__=="__main__":
    interface = InterfaceCreator.from_yaml("config.yml")
    interface.launch()