<!--
SPDX-FileCopyrightText: 2023 Marlon W (Mawoka)

SPDX-License-Identifier: MPL-2.0
-->

<script lang="ts">
	import QRCode from 'qrcode';
	import Spinner from '$lib/Spinner.svelte';
	import { getLocalization } from '$lib/i18n';

	const { t } = getLocalization();

	interface Props {
		totp_data: { url: string; secret: string } | undefined;
	}

	let { totp_data = $bindable() }: Props = $props();

	const get_image_url = async () => {
		return await QRCode.toDataURL(totp_data.url);
	};
</script>

<div class="w-screen h-screen fixed top-0 left-0 p-48 z-30 bg-black/50">
	<div class="w-full h-full">
		<button
			class="bg-gray-200 dark:bg-gray-900 px-2 py-1 rounded-t-lg hover:bg-gray-300 transition"
			onclick={() => {
				totp_data = undefined;
			}}
			>{$t('words.close')}
		</button>
		<div class="bg-white dark:bg-gray-700 rounded-b-lg rounded-tr-lg w-full h-full">
			<div class="grid grid-cols-3 w-full h-full">
				<div class="flex flex-col justify-center w-full h-5/6">
					<span class="m-auto"></span>
					<div class="h-5/6 flex">
						<p class="my-auto ml-auto">
							{$t('security_settings.totp_setup.scan_to_set_up')}
						</p>
					</div>
					<div class="flex">
						<p class="my-auto ml-auto">
							{$t('security_settings.totp_setup.enter_as_secret_if_no_see_code')}
						</p>
					</div>
				</div>
				<div class="flex flex-col justify-start w-full h-5/6">
					<h2 class="text-2xl m-auto">{$t('security_settings.totp_setup.totp_setup')}</h2>
					{#await get_image_url()}
						<Spinner my_20={false} />
					{:then data}
						<div class="m-auto h-5/6 object-contain w-full">
							<img
								src={data}
								alt="QR-Code for Totp-setup"
								class="w-full h-full object-contain"
							/>
						</div>
					{/await}
					<p class="m-auto select-all font-mono">{totp_data.secret}</p>
				</div>
				<div class="flex justify-center h-5/6 w-full">
					<p class="m-auto text-3xl p-4">
						{$t('security_settings.totp_setup.do_not_forget_backup_code')}
					</p>
				</div>
			</div>
		</div>
	</div>
</div>
