from datetime import datetime

from html5tagger import Builder, E  # type: ignore
from sanic import Request


def do_footer(builder: Builder, request: Request) -> None:
    builder.footer(
        _pagination(request),
        _content(),
        class_="footer",
    )


def _pagination(request: Request) -> Builder:
    return E.div(
        _pagination_left(request), _pagination_right(request), class_="level"
    )


def _pagination_left(request: Request) -> Builder:
    item = E.div(class_="level-item")
    if not hasattr(request.ctx, "previous_page"):
        return E.div(item, class_="level-left")
    with item:
        if p := request.ctx.previous_page:
            path = p.relative_path.with_suffix(".html")
            item.a(
                f"← {p.meta.title}",
                href=f"/{path}",
                hx_get=f"/{path}",
                hx_target="#content",
                hx_swap="innerHTML",
                hx_push_url="true",
                class_="button pagination",
            )
    return E.div(item, class_="level-left")


def _pagination_right(request: Request) -> Builder:
    item = E.div(class_="level-item")
    if not hasattr(request.ctx, "next_page"):
        return E.div(item, class_="level-right")
    with item:
        if p := request.ctx.next_page:
            path = p.relative_path.with_suffix(".html")
            item.a(
                f"{p.meta.title} →",
                href=f"/{path}",
                hx_get=f"/{path}",
                hx_target="#content",
                hx_swap="innerHTML",
                hx_push_url="true",
                class_="button pagination",
            )
    return E.div(item, class_="level-right")


def _content() -> Builder:
    year = datetime.now().year
    inner = E.p(
        E.a(
            "MIT Licensed",
            href="https://github.com/sanic-org/sanic/blob/master/LICENSE",
            target="_blank",
            rel="nofollow noopener noreferrer",
        ).br()(
            E.small(f"Copyright © 2018-{year} Sanic Community Organization")
        ),
    )
    return E.div(
        inner,
        E.p("~ Made with ❤️ and ☕️ ~"),
        class_="content has-text-centered",
    )