from dash import dcc, html

from ..libs.repository.repository import AbstractRepository


def html_list_schema(stage:AbstractRepository, with_tables=True):
    """ Build html list of schema in stage """
    ul_classes = "ml-2"
    schema_baseurl = f"/stg/{stage.name}/schema/"
    if with_tables:
        return html.Ul(
            [
                html.Li(
                    children = [
                        dcc.Link(
                            schema,
                            href=schema_baseurl + schema,
                            className="text-lg hover:underline"
                        ),
                        html_list_table(stage, schema)
                    ],
                    className=""
                ) for schema in stage.schemas()
            ],
            className=ul_classes
        )
    return html.Ul(
        [
            html.Li(
                dcc.Link(
                    schema,
                    href=schema_baseurl + schema,
                    className="text-lg hover:underline"
                ),
            ) for schema in stage.schemas()
        ],
        className=ul_classes
    )


def html_list_table(stage:AbstractRepository, schema:str):
    """ Build html list of table in stage """
    table_baseurl = f"/stg/{stage.name}/schm/{schema}/table/"
    return html.Ul(
        [
            html.Li(
                dcc.Link(
                    table,
                    href=table_baseurl + table,
                    className="hover:underline"
                ),
            ) for table in stage.tables(schema=schema)
        ],
        className="ml-4"
    )