from rio import Column, Component, event, TextStyle, Text, Revealer

from src.ezgg_lan_manager import ConfigurationService
from src.ezgg_lan_manager.components.MainViewContentBox import MainViewContentBox

RULES: list[str] = [
    "Respektvolles Verhalten: Sei höflich und respektvoll gegenüber anderen Gästen und dem Team.",
    "Alkohol und Drogen: Konsumiere Alkohol in Maßen und halte dich an die gültige Gesetzeslage.",
    "Sitzplätze: Respektiere die zugewiesenen Plätze und ändere sie nicht ohne Genehmigung.",
    "Notausgänge und Sicherheitsvorschriften: Informiere dich über die Notausgänge und beachte die Sicherheitsanweisungen.",
    "Müllentsorgung: Benutze die vorgesehenen Mülleimer und halte den Veranstaltungsort sauber.",
    "Rauchen: Halte dich an die Rauchverbote und benutze nur die ausgewiesenen Raucherbereiche.",
    "Hausrecht: Folge den Anweisungen des Veranstalters und des Sicherheitspersonals.",
    "Illegales: Das brechen des deutschen Rechts, insbesondere des Urheberrechts, bleibt auch auf LAN verboten."
]

AGB: dict[str, list[str]] = {
    "§1": [
        "Die Veranstaltung wird von der Einfach Zocken Gaming Gesellschaft e.V. organisiert.",
        "Unser Event verfolgt gemeinnützige Ziele und ist nicht auf Profit ausgerichtet. Die erhobenen Teilnahmebeiträge dienen lediglich der Kostendeckung. Überschüsse werden für die Organisation und Durchführung zukünftiger ähnlicher Veranstaltungen verwendet.",
        "Die Organisatoren haben das Recht, unerwünschte oder störende Personen jederzeit von der Veranstaltung auszuschließen (siehe §3). Im Falle eines Ausschlusses aufgrund eines Regelverstoßes erfolgt keine Rückerstattung des Eintrittspreises."
    ],
    "§2": [
        "Die Teilnahme an der Veranstaltung ist nur Personen gestattet, die mindestens 18 Jahre alt sind. Ein amtlicher Altersnachweis ist erforderlich. Kann dieser Nachweis nicht erbracht werden, wird der Zugang zur Veranstaltung verweigert.",
        "Jeder Teilnehmer muss die Teilnahmegebühr entrichtet haben und dies auf Anfrage nachweisen können. Mit der Bezahlung des Eintrittspreises erhält der Teilnehmer einen garantierten Platz auf der Veranstaltung.",
        "Alle Teilnehmer sind verpflichtet, vor der Veranstaltung sicherheitsrelevante Patches und Updates für Betriebssysteme und Spiele einzuspielen. Es wird nicht garantiert, dass diese während der Veranstaltung heruntergeladen werden können."
    ],
    "§3": [
        "Innerhalb des Veranstaltungsgebäudes gilt ein striktes Rauchverbot.",
        "Jeder Teilnehmer verpflichtet sich, während der Veranstaltung keine illegalen Handlungen durchzuführen.",
        "Die unautorisierte Verbreitung von urheberrechtlich geschütztem Material ist strengstens untersagt.",
        "Der Veranstalter übernimmt keine Haftung für Schäden an Geräten oder Daten der Teilnehmer, es sei denn, der Veranstalter oder seine Erfüllungsgehilfen haben die Schäden vorsätzlich oder grob fahrlässig verursacht. Ebenso wird keine Haftung bei Diebstahl oder Verlust persönlicher Gegenstände übernommen.",
        "Teilnehmer dürfen den Ablauf der Veranstaltung nicht absichtlich stören, insbesondere nicht den Betrieb des Computer- und Stromnetzwerks. Als absichtliche Störung zählt auch die Nutzung von Software, die dem Spieler einen unfairen Vorteil verschafft (z.B. Cheats, Hacks) sowie das Ausnutzen von Bugs in Spielen, um einen Vorteil zu erzielen. Solche Verstöße führen zum sofortigen Ausschluss aus allen Turnieren. Betrifft der Verstoß ein Teammitglied, wird das gesamte Team disqualifiziert, auch wenn die anderen Mitglieder nicht direkt beteiligt waren. Wiederholte oder schwerwiegende Verstöße können zum Ausschluss von der gesamten Veranstaltung führen.",
        "Die Nutzung von Aktivlautsprechern ist verboten, Kopfhörer sind Pflicht.",
        "Verursacht ein Teilnehmer Schäden, haftet er vollumfänglich für die entstehenden Kosten.",
        "Teilnehmer sind dazu verpflichtet, nach der Veranstaltung ihren Platz aufzuräumen und persönliche Gegenstände mitzunehmen."
    ],
    "§4": [
        "Der Veranstalter stellt während der Veranstaltung einen eingeschränkten Internetzugang zur Verfügung. Es wird jedoch keine Garantie für die Verfügbarkeit, Eignung oder Zuverlässigkeit des Zugangs übernommen. Der Veranstalter behält sich das Recht vor, den Zugang zeitweise oder vollständig einzuschränken oder zu sperren sowie bestimmte Dienste oder Websites zu blockieren.",
        "Für alle über das Internet getätigten Aktivitäten, Datenübertragungen und Rechtsgeschäfte ist der Teilnehmer allein verantwortlich. Entstehende Kosten durch die Nutzung von Drittanbieterdiensten trägt der Teilnehmer. Es gilt das Einhalten der gesetzlichen Bestimmungen.",
        "Der Teilnehmer stellt den Veranstalter von jeglichen Ansprüchen Dritter frei, die aus einer rechtswidrigen Nutzung des Internetzugangs oder einem Verstoß gegen diese Vereinbarung resultieren. Diese Freistellung schließt auch die Kosten für die Abwehr solcher Ansprüche ein.",
        "Der Veranstalter behält sich das Recht vor, die Nutzung des Internetzugangs zu protokollieren, um im Bedarfsfall Beweise für die Nutzung durch bestimmte Teilnehmer vorzulegen und den Veranstalter vor Schäden zu schützen."
    ]
}


class RulesPage(Component):
    @event.on_populate
    async def on_populate(self) -> None:
        await self.session.set_title(f"{self.session[ConfigurationService].get_lan_info().name} - Regeln & AGB")

    def build(self) -> Component:
        return Column(
            MainViewContentBox(
                Column(
                    Text(
                        text="Regeln",
                        style=TextStyle(
                            fill=self.session.theme.background_color,
                            font_size=1.2
                        ),
                        margin_top=2,
                        margin_bottom=0,
                        align_x=0.5
                    ),
                    Text(
                        text="(AGB's in verständlichem deutsch)",
                        style=TextStyle(
                            fill=self.session.theme.background_color,
                            font_size=0.5
                        ),
                        margin_top=0.5,
                        margin_bottom=2,
                        align_x=0.5
                    ),
                    *[Text(
                        f"{idx + 1}. {rule}",
                        style=TextStyle(
                            fill=self.session.theme.background_color,
                            font_size=0.9
                        ),
                        margin_bottom=0.8,
                        margin_left=1,
                        margin_right=1,
                        overflow="wrap"
                    ) for idx, rule in enumerate(RULES)],
                )
            ),
            MainViewContentBox(
                Column(
                    Text(
                        text="AGB",
                        style=TextStyle(
                            fill=self.session.theme.background_color,
                            font_size=1.2
                        ),
                        margin_top=2,
                        margin_bottom=1,
                        align_x=0.5
                    ),
                    Revealer(
                        header="§ 1 Allgemeine Bestimmungen",
                        header_style=TextStyle(
                            fill=self.session.theme.background_color,
                            font_size=1
                        ),
                        margin=1,
                        margin_top=2,
                        content=Column(
                            *[Text(
                                f"{idx + 1}. {rule}",
                                style=TextStyle(
                                    fill=self.session.theme.background_color,
                                    font_size=0.8
                                ),
                                margin_bottom=0.8,
                                margin_left=1,
                                margin_right=1,
                                overflow="wrap"
                            ) for idx, rule in enumerate(AGB["§1"])]
                        )
                    ),
                    Revealer(
                        header="§ 2 Teilnahmevoraussetzungen",
                        header_style=TextStyle(
                            fill=self.session.theme.background_color,
                            font_size=1
                        ),
                        margin=1,
                        margin_top=0,
                        content=Column(
                            *[Text(
                                f"{idx + 1}. {rule}",
                                style=TextStyle(
                                    fill=self.session.theme.background_color,
                                    font_size=0.8
                                ),
                                margin_bottom=0.8,
                                margin_left=1,
                                margin_right=1,
                                overflow="wrap"
                            ) for idx, rule in enumerate(AGB["§2"])]
                        )
                    ),
                    Revealer(
                        header="§ 3 Verhaltensregeln",
                        header_style=TextStyle(
                            fill=self.session.theme.background_color,
                            font_size=1
                        ),
                        margin=1,
                        margin_top=0,
                        content=Column(
                            *[Text(
                                f"{idx + 1}. {rule}",
                                style=TextStyle(
                                    fill=self.session.theme.background_color,
                                    font_size=0.8
                                ),
                                margin_bottom=0.8,
                                margin_left=1,
                                margin_right=1,
                                overflow="wrap"
                            ) for idx, rule in enumerate(AGB["§3"])]
                        )
                    ),
                    Revealer(
                        header="§ 4 Internetzugang",
                        header_style=TextStyle(
                            fill=self.session.theme.background_color,
                            font_size=1
                        ),
                        margin=1,
                        margin_top=0,
                        content=Column(
                            *[Text(
                                f"{idx + 1}. {rule}",
                                style=TextStyle(
                                    fill=self.session.theme.background_color,
                                    font_size=0.8
                                ),
                                margin_bottom=0.8,
                                margin_left=1,
                                margin_right=1,
                                overflow="wrap"
                            ) for idx, rule in enumerate(AGB["§4"])]
                        )
                    )
                )
            ),
            align_y=0
        )
