<script lang="ts">
// /** @type {import('./$types').PageData} */
export let data: any;
import { onMount } from 'svelte';
import { browser } from '$app/environment';
import { goto } from '$app/navigation';

import { ae_snip, ae_loc, ae_sess, ae_api, ae_trig, slct, slct_trigger } from '$lib/ae_stores';
import { events_loc, events_sess, events_slct, events_trigger, events_trig_kv } from '$lib/ae_events_stores';

if (browser) {
// onMount(() => {
    console.log('Browser environment detected.');

    let url_person_id = data.url.searchParams.get('person_id');
    let url_person_pass = data.url.searchParams.get('person_pass');
    let url_presentation_id = data.url.searchParams.get('presentation_id');
    let url_presenter_id = data.url.searchParams.get('presenter_id');
    let url_session_id = data.url.searchParams.get('session_id');

    // This should be turned into a function to correctly authenticate the person and allow them access to their presentations and presenter details.
    if (url_person_pass) {
        console.log(`ae_events_pres_mgmt session [slug] +page.svelte: event_session_id=${$events_slct.event_session_id}; person_id=${url_person_id}; person_pass=${url_person_pass}; presentation_id=${url_presentation_id}; presenter_id=${url_presenter_id}`);

        // Using temporary session values first.
        $events_sess.auth__entered_key = url_person_id;
        $events_sess.auth__entered_passcode = url_person_pass;

        $events_sess.auth__person.id = url_person_id;
        $events_sess.auth__person.presentation_id = url_presentation_id;
        $events_sess.auth__person.presenter_id = url_presenter_id;
        $events_sess.auth__person.session_id = url_session_id; // For POC or LCI Champions for sessions. Do not set for a presenter!

        $events_sess.auth__kv.person[url_person_id] = true;
        $events_sess.auth__kv.session[$events_slct.event_session_id] = true; // For POC or LCI Champions for sessions. Do not set for a presenter!
        $events_sess.auth__kv.presentation[url_presentation_id] = true;
        $events_sess.auth__kv.presenter[url_presenter_id] = true;

        // We need to set the selected presentation and presenter objects based on the respective IDs.
        if (url_presentation_id && url_presenter_id) {
            $events_slct.event_presentation_id = url_presentation_id;
            $events_slct.event_presenter_id = url_presenter_id;
        }

        console.log('Remove the passcode from the URL.');
        data.url.searchParams.delete('person_id');
        data.url.searchParams.delete('person_pass');
        data.url.searchParams.delete('presentation_id');
        data.url.searchParams.delete('presenter_id');
        data.url.searchParams.delete('session_id');

        let new_url = data.url.toString()
        console.log(new_url);
        goto(new_url, {replaceState: false});
        if (url_presenter_id) {
            presenter_sign_in();
        }

        if (url_session_id) {
            session_sign_in();
        }
    }
// });
}

// For session point of contact (moderator, chair, LCI Champions).
function session_sign_in() {
    console.log('Session sign in with URL values');

    $ae_loc.authenticated_access = true;
    $ae_loc.access_type = 'authenticated';

    $events_loc.auth__person.id = $events_sess.auth__entered_key; // person_id
    $events_loc.auth__person.entered_key = $events_sess.auth__entered_key; // also person_id in this case
    $events_loc.auth__person.email = 'test@example.com';
    $events_loc.auth__person.full_name = 'Test Person';

    $events_loc.auth__kv.person[$events_sess.entered_key] = true;
    $events_loc.auth__kv.session[$events_slct.event_session_id] = true;
    $events_loc.auth__kv.presentation[$events_sess.auth__person.presentation_id] = false; // Set to false for session POC (LCI Champions).
    $events_loc.auth__kv.presenter[$events_sess.auth__person.presenter_id] = false; // Set to false for session POC (LCI Champions).

    // Setting again here... just because for now.
    // $events_slct.event_presentation_id = $events_sess.auth__person.presentation_id;
    // $events_slct.event_presenter_id = $events_sess.auth__person.presenter_id;
}

// For presenters within a session presentation.
function presenter_sign_in() {
    console.log('Presenter sign in with URL values');

    $ae_loc.authenticated_access = true;
    $ae_loc.access_type = 'authenticated';

    $events_loc.auth__person.id = $events_sess.auth__entered_key; // person_id
    $events_loc.auth__person.entered_key = $events_sess.auth__entered_key; // also person_id in this case
    $events_loc.auth__person.email = 'test@example.com';
    $events_loc.auth__person.full_name = 'Test Person';

    $events_loc.auth__kv.person[$events_sess.entered_key] = true;
    $events_loc.auth__kv.session[$events_slct.event_session_id] = false; // Set to false for presenters.
    $events_loc.auth__kv.presentation[$events_sess.auth__person.presentation_id] = true;
    $events_loc.auth__kv.presenter[$events_sess.auth__person.presenter_id] = true;

    // Setting again here... just because for now.
    $events_slct.event_presentation_id = $events_sess.auth__person.presentation_id;
    $events_slct.event_presenter_id = $events_sess.auth__person.presenter_id;
}

function sign_out() {
    $ae_loc.authenticated_access = false;
    $ae_loc.access_type = 'anonymous';

    $events_loc.auth__person = {
        id: null,
        email: null,
        full_name: null,
        entered_key: null,
        entered_passcode: null,
    };
    $events_loc.auth__kv = {
        session: {},
        presentation: {},
        presenter: {},
        person: {},
    };

    $events_sess.auth__person.presenter_id = null;
    // $events_sess.auth__person.presentation_id = null;
    $events_sess.auth__person.session_id = null;
}
</script>


<span>
{#if $events_loc.auth__person?.id}
<button
    type="button"
    class="btn btn-sm variant-soft-warning"
    on:click={() => {
        sign_out();
        alert('You have been signed out.');
    }}
    >
    <span class="fas fa-times mx-1"></span>
    Sign Out
</button>
{:else if $events_sess.auth__person.presenter_id || $events_sess.auth__person.session_id}
<div
    class="border border-gray-200 p-2 rounded-md m-2 text-center space-y-2"
    >
    <div
        class="text-sm text-gray-500"
        >
        Use the link that was sent to your email address to sign in or enter your key and passcode to sign in.
    </div>
    <div>
    <input
        type="text"
        class="input max-w-36"
        placeholder="Key"
        value={$events_sess.auth__entered_key ?? ''}
        on:input={(e) => $events_sess.auth__entered_key = e.target.value}
        >
    <input
        type="text"
        class="input max-w-36"
        placeholder="Passcode"
        value={$events_sess.auth__entered_passcode ?? ''}
        on:input={(e) => $events_sess.auth__entered_passcode = e.target.value}
        >
    <button
        class="btn btn-md variant-ghost-primary"
        on:click={() => {
            console.log('Sign in with URL values');

            if ($events_sess.auth__person.presenter_id) {
                presenter_sign_in();
            } else if ($events_sess.auth__person.session_id) {
                session_sign_in();
            }

            // This needs to be moved to a function!

            // $events_loc.auth__person.id = $events_sess.auth__entered_key; // person_id
            // $events_loc.auth__person.entered_key = $events_sess.auth__entered_key; // also person_id in this case
            // $events_loc.auth__person.email = 'test@example.com';
            // $events_loc.auth__person.full_name = 'Test Person';

            // $events_loc.auth__kv.person[$events_sess.entered_key] = true;
            // $events_loc.auth__kv.session[$events_slct.event_session_id] = true;
            // $events_loc.auth__kv.presentation[$events_sess.auth__person.presentation_id] = true;
            // $events_loc.auth__kv.presenter[$events_sess.auth__person.presenter_id] = true;

            // Setting again here... just because for now.
            // $events_slct.event_presentation_id = $events_sess.auth__person.presentation_id;
            // $events_slct.event_presenter_id = $events_sess.auth__person.presenter_id;
        }}
        >
        <span class="fas fa-sign-in-alt mx-1"></span>
        Sign In
    </button>
    </div>

    <div
        class="text-sm text-gray-500"
        >
        For:
        session: {$events_sess.auth__person.session_id}
        presentation: {$events_sess.auth__person.presentation_id}
        presenter: {$events_sess.auth__person.presenter_id}
        <br>

        <!-- {$lq__event_presentation_obj?.name ? `Name: "${$lq__event_presentation_obj.name}"` : '-- not set --'} -->
    </div>


    <!-- {#if $events_loc.auth__person?.id}
        <button
            type="button"
            class="btn btn-sm variant-soft-warning"
            on:click={() => {
                sign_out();
                alert('You have been signed out.');
            }}
            >
            <span class="fas fa-times mx-1"></span>
            Sign Out
        </button>
    {/if} -->
</div>
{/if}
</span>