<script lang="ts">
    import "../../app.pcss";
    import { afterNavigate, beforeNavigate, goto } from "$app/navigation";
    import { is_active } from "$lib/session";
    import type { Navigation } from "@sveltejs/kit";
    import { setLocale } from "$lib/i18n/i18n-svelte";
    import { onMount } from "svelte";
    import type { LayoutData } from "./$types";
    import LocaleSwitcher from "$lib/components/locale-switcher.svelte";

    export let data: LayoutData;
    onMount(() => setLocale(data.locale));

    async function redirect_if_necessary(ticket: Navigation) {
        const sessionIsValid = await is_active();
        // TODO: ticket.to can be empty while navigating, so coalesce could probably cause non-public routes to cause a redir to /login...
        const isPublicRoute = ticket.to?.routeId?.startsWith("(main)/(public)");

        console.log("redir: ", {
            isPublicRoute,
            sessionIsValid,
        });

        if (sessionIsValid && isPublicRoute) {
            await goto("/home");
        } else if (!sessionIsValid && !isPublicRoute) {
            await goto("/login");
        }
    }

    // This should probably be removed in favor of the logic in layout.server.ts.
    // That requires a more sophisticated server side implementation of session handling,
    // and i don't want that tbh, i want to stay as much in the browser as possible.
    afterNavigate(redirect_if_necessary);
    beforeNavigate(redirect_if_necessary);
</script>

<LocaleSwitcher />
<slot />
