import { localStorageStore } from '@skeletonlabs/skeleton';
import { get, readable, writable } from 'svelte/store';
import type { get, Writable } from 'svelte/store';


import { PUBLIC_TESTING, PUBLIC_AE_API_PROTOCOL, PUBLIC_AE_API_SERVER, PUBLIC_AE_API_BAK_SERVER, PUBLIC_AE_API_PORT, PUBLIC_AE_API_PATH, PUBLIC_AE_API_SECRET_KEY, PUBLIC_AE_API_CRUD_SUPER_KEY, PUBLIC_AE_NO_ACCOUNT_ID, PUBLIC_AE_NO_ACCOUNT_ID_TOKEN, PUBLIC_AE_ACCOUNT_ID, PUBLIC_AE_EVENT_ID, PUBLIC_AE_SPONSORSHIP_CFG_ID } from '$env/static/public';
// console.log(`AE Stores - PUBLIC_TESTING:`, PUBLIC_TESTING);

const api_base_url = `${PUBLIC_AE_API_PROTOCOL}://${PUBLIC_AE_API_SERVER}:${PUBLIC_AE_API_PORT}${PUBLIC_AE_API_PATH}`;
const api_base_url_bak = `${PUBLIC_AE_API_PROTOCOL}://${PUBLIC_AE_API_BAK_SERVER}:${PUBLIC_AE_API_PORT}${PUBLIC_AE_API_PATH}`;

const api_secret_key = PUBLIC_AE_API_SECRET_KEY;
const api_crud_super_key = PUBLIC_AE_API_CRUD_SUPER_KEY;

// const ae_account_id = PUBLIC_AE_ACCOUNT_ID;
let ae_account_id: null|string = null;
const ae_no_account_id = PUBLIC_AE_NO_ACCOUNT_ID;
const ae_no_account_id_token = PUBLIC_AE_NO_ACCOUNT_ID_TOKEN;
const ae_event_id = PUBLIC_AE_EVENT_ID;
const ae_sponsorship_cfg_id = PUBLIC_AE_SPONSORSHIP_CFG_ID;

// import { getStores, navigating, page, updated } from '$app/stores';
// import { assets, base, resolveRoute } from '$app/paths';
// console.log(page.path); // Everything after the domian name

// console.log(import.meta.env.MODE);
// console.log(import.meta.env.BASE_URL);


// Export the key_val type for use in other files.
export type key_val = {
    [key: string]: any; // variable key
    // name: string;
};
// export type key_val = key_val;

// *** BEGIN *** Longer-term app data. This should be stored to local storage.
export let ae_app_local_data_struct: key_val = {
    'ver': '2024-03-06_18',
    'name': 'Aether - App Hub (SvelteKit 2.x Svelte 4.x)',
    'theme': 'light',
    'iframe': false,
    'title': `OSIT's Æ`, // - Dev SvelteKit`, // &AElig;

    'debug': false, // A simple flag to know if we should show debug information.

    'account_id': ae_account_id, // OSIT Demo _XY7DXtc9MY
    'site_domain': null, // https://example.com, https://dev.example.com, etc.
    'site_cfg_json': {},

    'page_access_code_li': {'administrator': '11500', 'trusted': '19111', 'authenticated': '00000'},
    'administrator_passcode': '11500',
    'trusted_passcode': '19111',

    'access_type': 'anonymous',
    'administrator_access': false,
    'trusted_access': false,
    'public_access': false,
    'authenticated_access': false,
    'anonymous_access': true,

    'ds': {},
    'hub': {
        'show_element__cfg': true,
        'show_element__cfg_detail': false,
        'show_element__access_type': true,
        'theme_mode': 'dark',
        'theme_name': 'wintry',

        'classes__form': 'border border-surface-200 p-4 space-y-4 rounded-container-token',

        'qr': {},
    },
    'mod': {
        'archives': {},

        'events': {
            'event_id': null,

            show_edit__event_presenter_obj: false,
            show_list__event_presenter_obj_li: true,
            show_view__event_presenter_obj: false,

            submit_status: null, // 'saving', 'created', 'updated'

            // Badge Printing

            // Lead Retrievals

            // Presentation Management

            // Speakers Management
            'default_session_id': null, // Assign to presenters by default

            // other
        },

        'journals': {},

        'posts': {},

        'sponsorships': {
            'cfg_id': ae_sponsorship_cfg_id,

            for_type: null,
            for_id: null,

            level_guest_max_li: {
                0: 0,
                1: 4, // CHOW 2024 - Friend
                2: 8, // CHOW 2024 - Supporter
                3: 8, // CHOW 2024 - Advocate
                4: 8, // CHOW 2024 - Champion
                5: 8, // CHOW 2024 - Presenting Partner
                6: 16, // CHOW 2024 - Signature Partner
                7: 16, // CHOW 2024 - Premier Partner
            },

            show_edit__sponsorship_obj: false,
            show_list__sponsorship_obj_li: true,
            show_view__sponsorship_obj: false,

            show_question__accommodations: false,

            submit_status: null, // 'saving', 'created', 'updated'
        },

        'testing': {},
    },
}
console.log(`AE Stores - App Local Storage Data:`, ae_app_local_data_struct);

// This works, but does not uses local storage:
// export let ae_loc = writable(ae_app_local_data_struct);

// This works and uses local storage:
export let ae_loc: Writable<key_val> = localStorageStore('ae_loc', ae_app_local_data_struct);
// console.log(`AE Stores - App Local Storage Data:`, get(ae_loc));


// *** BEGIN *** Temporary app data. This should be stored to session storage.
export let ae_app_session_data_struct: key_val = {
    'ver': '2024-02-27_13',
    // 'name': 'Aether App Template',
    // 'theme': 'light',
    // 'account_id': ae_account_id,
    'ds': {
        'submit_status': null,
    },
    'ds_loaded': {
    },
    'hub': {
        'show_xyz': null,
    },
    'mod': {
        'archives': {},
        'events': {
            // Badge Printing

            // Lead Retrievals

            // Presentation Management

            // Speakers Management

            // other
        },
        'journals': {},
        'posts': {},
        'sponsorships': {
            disable_submit__sponsorship_obj: false,
            slct__level_num: 0,
            show_question__accommodations: false,
            submit_status: null, // 'saving', 'created', 'updated', 'saved'
        },
        'testing': {},
    },
};
console.log(`AE Stores - App Session Storage Data:`, ae_app_session_data_struct);
export let ae_sess = writable(ae_app_session_data_struct);


// *** BEGIN *** Temporary API data. This should be stored to session storage.
export let ae_api_data_struct: key_val = {
    'ver': '2024-02-22_17',
    'base_url': api_base_url,
    'base_url_bak': api_base_url_bak,
    'api_secret_key': api_secret_key, // 'YOUR_API_SECRET_KEY',
    'api_secret_key_bak': api_secret_key, // 'YOUR_API_SECRET_KEY',
    'api_crud_super_key': api_crud_super_key, // 'YOUR_SUPER_KEY' 'zp5PtX4zUsI'
    'headers': {},
    'account_id': ae_account_id,
};

let ae_api_headers: key_val = {};
ae_api_headers['Access-Control-Allow-Origin'] = '*';
ae_api_headers['content-type'] = 'application/json';
ae_api_headers['x-aether-api-key'] = ae_api_data_struct.api_secret_key;
ae_api_headers['x-aether-api-token'] = 'fake-temp-token';
ae_api_headers['x-aether-api-expire-on'] = '';
if (ae_account_id) {
    ae_api_headers['x-account-id'] = ae_account_id;
} else {
    // ae_api_headers['x-account-id'] = ;
}
if (ae_no_account_id) {
    ae_api_headers['x-no-account-id'] = ae_no_account_id;
}
ae_api_data_struct['headers'] = ae_api_headers;

console.log(`AE Stores - API Data:`, ae_api_data_struct);
export let ae_api = writable(ae_api_data_struct);

// *** BEGIN *** Trigger to update the slct variables and other things.
let ae_trig_template: key_val = {};
export let ae_trig = writable(ae_trig_template);


/* *** BEGIN *** Initialize slct and slct_trigger */
/* The slct and slct_trigger variable should not be stored in local storage. Only use session storage because browser tabs can be open to different accounts, events, sponsorships, etc. */

// Intended for temporary session storage.
// Updated 2024-03-15
let slct_obj_template: key_val = {
    'account_id': ae_account_id,
    'account_obj': {},
    'event_id': null,
    'event_obj': {},
    'event_obj_li': [],
    // 'event_exhibit_id': null,
    // 'event_exhibit_obj': {},
    // 'event_exhibit_obj_li': [],
    'event_presentation_id': null,
    'event_presentation_obj': {},
    'event_presentation_obj_li': [],
    'event_presenter_id': null,
    'event_presenter_obj': {},
    'event_presenter_obj_li': [],
    'event_session_id': null,
    'event_session_obj': {},
    'event_session_obj_li': [],
    'sponsorship_id': null,
    'sponsorship_obj': {},
    'sponsorship_obj_li': [],
    'sponsorship_cfg_id': ae_sponsorship_cfg_id,
    'sponsorship_cfg_obj': {},
    'sponsorship_cfg_obj_li': [],
    'post_id': null,
    'post_obj': {},
    'post_obj_li': [],
    'post_comment_id': null,
    'post_comment_obj': {},
    'post_comment_obj_li': []
};
// console.log(`AE Stores - Selected Objects:`, slct_obj_template);

// This works, and uses *session* (not local) storage:
export let slct = writable(slct_obj_template);

// This works and uses *local* storage:
// export let slct: Writable<key_val> = localStorageStore('ae_slct', slct_obj_template);


/* *** BEGIN *** Initialize slct_trigger */
// Intended for temporary session storage.
// Updated 2024-02-27
export let slct_trigger: any = writable(null);
// console.log(`AE Stores - Selected Trigger:`, slct_trigger);
