from dataclasses import dataclass
from pathlib import Path

import rio
from from_root import from_root


@dataclass
class NavigationLink:
    text: str
    icon: str
    target: str


NAVIGATION_LINKS = [
    NavigationLink("Start", "material/home", "/"),
    NavigationLink("Über den Verein", "material/info", "/about"),
    NavigationLink("Unsere LAN-Party", "material/videogame_asset", "https://ezgg-lan.de"),
    NavigationLink("Mitglieder", "material/groups", "/member"),
    NavigationLink("Satzung", "material/contract", "/constitution"),
    NavigationLink("Mitglied werden", "material/contract-edit", "/join"),
    NavigationLink("Galerie", "material/gallery-thumbnail", "/pics"),
    NavigationLink("Impressum", "material/data-info-alert", "/imprint"),
    NavigationLink("Datenschutz", "material/privacy-tip", "/privacy")
]


class Navigation(rio.Component):
    @rio.event.on_page_change
    async def on_page_change(self) -> None:
        await self.force_refresh()

    def build(self) -> rio.Component:
        active_page = self.session.active_page_instances[0]

        links = [
            rio.Link(
                rio.Button(
                    rio.Row(
                        rio.Icon(link_data.icon),
                        rio.Text(link_data.text),
                        spacing=0.5,
                        margin_x=1,
                        margin_y=0.2,
                        align_x=0,
                    ),
                    style=("major" if active_page.page_url == link_data.target.replace("/", "") else "plain"),
                ),
                link_data.target,
            )
            for link_data in NAVIGATION_LINKS
        ]

        return rio.Row(
            rio.Rectangle(
                content=rio.Column(
                    *links,
                    spacing=1,
                    margin=1, align_x=0
                ),
                fill=self.session.theme.neutral_color,
                corner_radius=self.session.theme.corner_radius_medium,
                shadow_radius=0.5,
                shadow_color=self.session.theme.hud_color,
                shadow_offset_y=0
            ),
            align_y=0,
            margin=1,
            margin_top=0
        )
