<script>
    import { invoke } from '@tauri-apps/api/core';
    import { emit } from '@tauri-apps/api/event';
    import { onMount, createEventDispatcher } from 'svelte';

    import { appState } from '../lib/state.js';
    import { navigate } from '../lib/routing.js';
    import { getRootCause } from '../lib/errors.js';

    import ErrorAlert from '../ui/ErrorAlert.svelte';
    import Link from '../ui/Link.svelte';
    import PassphraseInput from '../ui/PassphraseInput.svelte';
    import ResetPassphrase from './passphrase/ResetPassphrase.svelte';
    import Spinner from '../ui/Spinner.svelte';
    import vaultDoorSvg from '../assets/vault_door.svg?raw';


    const dispatch = createEventDispatcher();

    let alert;
    let passphrase = '';

    let saving = false;
    async function unlock() {
        saving = true;
        try {
            await alert.run(async () => invoke('unlock', {passphrase}));
            $appState.sessionStatus = 'unlocked';
            emit('unlocked');
            dispatch('unlocked');
        }
        finally {
            saving = false;
        }

    }

    let input;
    onMount(() => input.focus());
</script>


<svelte:window on:focus={input.focus} />

<div class="fixed top-0 w-full p-2 text-center">
    <h1 class="text-3xl font-bold">Creddy is locked</h1>
</div>

<form action="#" on:submit|preventDefault="{unlock}" class="form-control space-y-4 max-w-sm m-auto p-4 h-screen justify-center">
    <div class="mx-auto">
        {@html vaultDoorSvg}
    </div>

    <label class="space-y-4">
        <h2 class="font-bold text-xl text-center">Please enter your passphrase</h2>

        <ErrorAlert bind:this="{alert}" />

        <!-- svelte-ignore a11y-autofocus -->
        <PassphraseInput
            bind:this={input}
            bind:value={passphrase}
            placeholder="correct horse battery staple"
        />
    </label>

    <button type="submit" class="btn btn-primary">
        {#if saving}
            <Spinner class="w-5 h-5" thickness="12"/>
        {:else}
            Submit
        {/if}
    </button>

    <ResetPassphrase />
</form>