<script lang="ts">
	import 'tailwindcss/tailwind.css';
	import { onDestroy, onMount } from 'svelte';
	import { user } from '$lib/stores/user.js';
	import { type User } from '@supabase/auth-js';
	import SignIn from '$lib/components/SignIn.svelte';
	import SignOut from '$lib/components/SignOut.svelte';

	import { pwaInfo } from 'virtual:pwa-info';
	import { pwaAssetsHead } from 'virtual:pwa-assets/head';

	$: webManifestLink = pwaInfo ? pwaInfo.webManifest.linkTag : '';

	export let data;
	let { supabase } = data;
	$: ({ supabase } = data);

	let localUser = null as User | null;
	const unsubscribe = user.subscribe((value) => {
		localUser = value;
	});
	onDestroy(unsubscribe);

	onMount(async () => {
		await getUser();

		if (pwaInfo) {
			const { registerSW } = await import('virtual:pwa-register');
			registerSW({
				immediate: true,
				onRegistered(r) {
					// uncomment following code if you want check for updates
					// r && setInterval(() => {
					//    console.log('Checking for sw update')
					//    r.update()
					// }, 20000 /* 20s for testing purposes */)
					console.log(`SW Registered: ${r}`);
				},
				onRegisterError(error) {
					console.log('SW registration error', error);
				}
			});
		}
	});

	async function getUser() {
		const {
			data: { session }
		} = await supabase.auth.getSession();

		if (session) {
			localUser = session.user;
		} else {
			localUser = null;
		}

		// Update the store so that user is available to all components
		user.set(localUser);
	}
</script>

<svelte:head>
	{#if pwaAssetsHead.themeColor}
		<meta name="theme-color" content={pwaAssetsHead.themeColor.content} />
	{/if}
	{#if pwaAssetsHead.description}
		<meta name="description" content={pwaAssetsHead.description.content} />
	{/if}
	{#each pwaAssetsHead.links as link}
		<link {...link} />
	{/each}
	<!-- eslint-disable-next-line svelte/no-at-html-tags -->
	{@html webManifestLink}

	<!-- <meta
		name="description"
		content="A free and open source web app to track completion of a living Pokédex, which works offline."
	/> -->
	<meta property="og:title" content="Living Dex Tracker - A free Pokédex completion tool" />
	<meta property="og:url" content="https://pokedex.jcreek.co.uk" />
	<meta
		property="og:description"
		content="A free and open source web app to track completion of a living Pokédex, which works offline."
	/>
	<link rel="canonical" href="https://pokedex.jcreek.co.uk" />
	<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
	<!-- <link rel="apple-touch-icon" href="%sveltekit.assets%/apple-touch-icon.png" /> -->
</svelte:head>

<div class="flex flex-col min-h-screen">
	<header>
		<div class="navbar bg-primary text-primary-content">
			<div class="navbar-start">
				<div class="dropdown">
					<div tabindex="0" role="button" class="btn btn-ghost btn-circle">
						<svg
							xmlns="http://www.w3.org/2000/svg"
							class="h-5 w-5"
							fill="none"
							viewBox="0 0 24 24"
							stroke="currentColor"
							><path
								stroke-linecap="round"
								stroke-linejoin="round"
								stroke-width="2"
								d="M4 6h16M4 12h16M4 18h7"
							/></svg
						>
					</div>
					<ul
						class="menu menu-sm dropdown-content mt-3 z-[1] p-2 shadow bg-primary text-primary-content rounded-box w-52"
					>
						<li><a href="/about">About</a></li>
						<li>
							<a href="https://github.com/jcreek/LivingDexTracker" target="_blank">Contribute</a>
						</li>
					</ul>
				</div>
			</div>
			<div class="navbar-center">
				<a class="btn btn-ghost text-xl" href="/">Living Dex Tracker</a>
			</div>
			<div class="navbar-end">
				<button class="btn btn-ghost btn-circle">
					<svg
						xmlns="http://www.w3.org/2000/svg"
						class="h-5 w-5"
						fill="none"
						viewBox="0 0 24 24"
						stroke="currentColor"
						><path
							stroke-linecap="round"
							stroke-linejoin="round"
							stroke-width="2"
							d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"
						/></svg
					>
				</button>
				<div class="dropdown dropdown-end">
					<div tabindex="0" role="button" class="btn btn-ghost btn-circle avatar">
						<div class="w-10 rounded-full">
							<img alt="usericon" src="/OIG5.jpg" />
						</div>
					</div>
					<ul
						tabindex="-1"
						class="mt-3 z-[1] p-2 shadow menu menu-sm dropdown-content bg-primary text-primary-content rounded-box min-w-[13rem] w-auto"
					>
						{#if localUser}
							<li>
								<a href="/mydex"> My Dex </a>
							</li>
							<li>
								<a href="/profile"> Profile </a>
							</li>
							<li><a href="/settings">Settings</a></li>
							<li><SignOut {supabase} on:signedOut={getUser} /></li>
						{:else}
							<li><SignIn {supabase} on:signedIn={getUser} /></li>
						{/if}
					</ul>
				</div>
			</div>
		</div>
	</header>

	<main class="flex-grow">
		<slot />
	</main>

	<footer class="footer items-center p-4 bg-neutral text-neutral-content bottom-0">
		<aside class="items-center grid-flow-col">
			<a href="https://github.com/jcreek/LivingDexTracker" target="_blank">
				<svg
					width="36"
					height="36"
					fill-rule="evenodd"
					clip-rule="evenodd"
					class="fill-current"
					viewBox="0 0 120 120"
				>
					<path
						fill-rule="evenodd"
						clip-rule="evenodd"
						d="M48.854 0C21.839 0 0 22 0 49.217c0 21.756 13.993 40.172 33.405 46.69 2.427.49 3.316-1.059 3.316-2.362 0-1.141-.08-5.052-.08-9.127-13.59 2.934-16.42-5.867-16.42-5.867-2.184-5.704-5.42-7.17-5.42-7.17-4.448-3.015.324-3.015.324-3.015 4.934.326 7.523 5.052 7.523 5.052 4.367 7.496 11.404 5.378 14.235 4.074.404-3.178 1.699-5.378 3.074-6.6-10.839-1.141-22.243-5.378-22.243-24.283 0-5.378 1.94-9.778 5.014-13.2-.485-1.222-2.184-6.275.486-13.038 0 0 4.125-1.304 13.426 5.052a46.97 46.97 0 0 1 12.214-1.63c4.125 0 8.33.571 12.213 1.63 9.302-6.356 13.427-5.052 13.427-5.052 2.67 6.763.97 11.816.485 13.038 3.155 3.422 5.015 7.822 5.015 13.2 0 18.905-11.404 23.06-22.324 24.283 1.78 1.548 3.316 4.481 3.316 9.126 0 6.6-.08 11.897-.08 13.526 0 1.304.89 2.853 3.316 2.364 19.412-6.52 33.405-24.935 33.405-46.691C97.707 22 75.788 0 48.854 0z"
					/>
				</svg>
			</a>
			<p>
				Open source and free to use, forever. We are in no way associated with Nintendo, Game Freak
				or The Pokémon Company.
			</p>
		</aside>
		<nav class="grid-flow-col gap-4 md:place-self-center md:justify-self-end">
			<a href="https://discord.gg/SQcJkaXDye" target="_blank"
				><svg
					xmlns="http://www.w3.org/2000/svg"
					width="24"
					height="24"
					viewBox="0 0 127.14 96.36"
					class="fill-current"
				>
					<path
						d="M107.7,8.07A105.15,105.15,0,0,0,81.47,0a72.06,72.06,0,0,0-3.36,6.83A97.68,97.68,0,0,0,49,6.83,72.37,72.37,0,0,0,45.64,0,105.89,105.89,0,0,0,19.39,8.09C2.79,32.65-1.71,56.6.54,80.21h0A105.73,105.73,0,0,0,32.71,96.36,77.7,77.7,0,0,0,39.6,85.25a68.42,68.42,0,0,1-10.85-5.18c.91-.66,1.8-1.34,2.66-2a75.57,75.57,0,0,0,64.32,0c.87.71,1.76,1.39,2.66,2a68.68,68.68,0,0,1-10.87,5.19,77,77,0,0,0,6.89,11.1A105.25,105.25,0,0,0,126.6,80.22h0C129.24,52.84,122.09,29.11,107.7,8.07ZM42.45,65.69C36.18,65.69,31,60,31,53s5-12.74,11.43-12.74S54,46,53.89,53,48.84,65.69,42.45,65.69Zm42.24,0C78.41,65.69,73.25,60,73.25,53s5-12.74,11.44-12.74S96.23,46,96.12,53,91.08,65.69,84.69,65.69Z"
					/>
				</svg>
			</a>
		</nav>
	</footer>

	{#await import('$lib/components/pwa/ReloadPrompt.svelte') then { default: ReloadPrompt }}
		<ReloadPrompt />
	{/await}
</div>
