<!--
  -   This file is a part of the SteamWar software.
  -
  -   Copyright (C) 2023 SteamWar.de-Serverteam
  -
  -   This program is free software: you can redistribute it and/or modify
  -   it under the terms of the GNU Affero General Public License as published by
  -   the Free Software Foundation, either version 3 of the License, or
  -   (at your option) any later version.
  -
  -   This program is distributed in the hope that it will be useful,
  -   but WITHOUT ANY WARRANTY; without even the implied warranty of
  -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  -   GNU Affero General Public License for more details.
  -
  -   You should have received a copy of the GNU Affero General Public License
  -   along with this program.  If not, see <https://www.gnu.org/licenses/>.
  -->

<script lang="ts">
    import type {ConditionsFailedEvent, RouteDefinition} from "svelte-spa-router";
    import wrap from "svelte-spa-router/wrap";
    import Router, {replace} from "svelte-spa-router";
    import {get} from "svelte/store";
    import {loggedIn} from "@repo/authv2.ts";

    const routes: RouteDefinition = {
        "/": wrap({asyncComponent: () => import("./pages/Home.svelte"), conditions: detail => get(loggedIn)}),
        "/perms": wrap({
            asyncComponent: () => import("./pages/Perms.svelte"),
            conditions: detail => get(loggedIn)
        }),
        "/login": wrap({
            asyncComponent: () => import("./pages/Login.svelte"),
            conditions: detail => !get(loggedIn)
        }),
        "/event/:id": wrap({
            asyncComponent: () => import("./pages/Event.svelte"),
            conditions: detail => get(loggedIn)
        }),
        "/event/:id/generate": wrap({
            asyncComponent: () => import("./pages/Generate.svelte"),
            conditions: detail => get(loggedIn)
        }),
        "/edit": wrap({
            asyncComponent: () => import("./pages/Edit.svelte"),
            conditions: detail => get(loggedIn)
        }),
        "/display/:event": wrap({
            asyncComponent: () => import("./pages/Display.svelte"),
            conditions: detail => get(loggedIn)
        }),
        "*": wrap({asyncComponent: () => import("./pages/NotFound.svelte")})
    };

    function conditionsFailed(event: ConditionsFailedEvent) {
        console.log(event)

        if (event.detail.location === "/login") {
            replace("/");
        } else {
            replace("/login");
        }
    }
</script>

<main class="dark:bg-gray-900 min-w-full min-h-screen text-gray-900 dark:text-gray-300">
    <Router {routes} on:conditionsFailed={conditionsFailed} />
</main>
