from __future__ import annotations

from contextlib import contextmanager
from typing import Generator

from html5tagger import Builder, E
from sanic import Request

from .base import BaseLayout


class HomeLayout(BaseLayout):
    @contextmanager
    def layout(
        self, request: Request, full: bool = True
    ) -> Generator[None, None, None]:
        self._hero(request.ctx.language)
        with self.builder.div(class_="container"):
            yield

    def _hero(self, language: str) -> None:
        with self.builder.section(class_="hero is-large has-text-centered"):
            self.builder.div(
                E.h1(E.span("Sanic"), class_="title"),
                E.h2(class_="subtitle")("Build fast. Run fast."),
                E.h3(class_="tagline")("Accelerate your web app development"),
                self._do_buttons(language),
                class_="hero-body",
            )

    def _do_buttons(self, language: str) -> Builder:
        builder = E.div(class_="buttons is-centered")
        with builder:
            builder.a(
                "Get Started",
                class_="button is-primary",
                href=f"/{language}/guide/getting-started.html",
            )
            builder.a(
                "Help",
                class_="button is-outlined",
                href=f"/{language}/help.html",
            )
            builder.a(
                "GitHub",
                class_="button is-outlined",
                href="https://github.com/sanic-org/sanic",
                target="_blank",
            )
        return builder