/** @type {import('./$types').LayoutLoad} */

import { get } from 'svelte/store';

import { api } from '$lib/api';
import { ae_loc, ae_sess, ae_api, slct, slct_trigger } from '$lib/ae_stores';
import type { key_val } from '$lib/ae_stores';


// properties: params, route, url
// functions: fetch, setHeaders, parent, depends, untrack
export async function load({ params, url }) { // params, route, url
    // console.log(`Svelte root layout.ts data = params:`, params);
    // console.log(`Svelte root layout.ts data = route:`, route);
    // console.log(`Svelte root layout.ts data = url:`, url);

    let ae_loc_tmp = get(ae_loc);
    // console.log(`ae_loc = `, ae_loc_tmp);

    let ds_code_li: null|key_val = ae_loc_tmp.ds;
    // console.log(`ae_ ds_code_li = `, ds_code_li);
    let ds_code: null|string = null;


    let data_struct = {
        ae_loc: get(ae_loc),
        ae_api: get(ae_api),
        ae_ds: {},
        ae_hub: {}, // was ae_core
        ae_m_sponsorships: {},
        ae_m_events: {},
        ae_m_events_speakers: {},

        iframe: false,

        ae_root_layout_ts: true,

        sections: [
			{ slug: 'new', title: 'New Test' },
			{ slug: 'manage', title: 'Manage Test' },
            { slug: 'test', title: 'Test Test' },
		],

        params: params,

        url: url,

    };

    let loading_results = null;
    // let access_code_li_json = null;

    // First do a site_domain look up to check if it is valid and get the account_id.
    if (url.host) {
        // ae_loc.url_host = data.url.host; // Use this to look up? sub.example.com:123
        // ae_loc.fqdn = url.host; // Use this to look up? sub.example.com:123
        // ae_loc.url_hostname = data.url.hostname; // sub.example.com
        // ae_loc.url_origin = data.url.origin; // Use this to look up? https://sub.example.com:123
        // ae_loc.site_domain = data.url.origin;
        // console.log(`ae_loc = `, ae_loc);

        loading_results = await handle_load_ae_obj_id__site_domain({fqdn:  url.host, try_cache: false})

        .then(function (site_domain_results) {
            if (site_domain_results) {
                // console.log(`ae_ site_domain_results = `, site_domain_results);

                let ae_api_tmp = get(ae_api);

                ae_api_tmp['account_id'] = site_domain_results.account_id_random;
                ae_api_tmp['headers']['x-account-id'] = site_domain_results.account_id_random;
                ae_api_tmp['headers']['x-no-account-id'] = null;

                ae_api.set(ae_api_tmp);
                // console.log(`ae_api = `, get(ae_api));

                ae_loc_tmp['account_id'] = site_domain_results.account_id_random;
                ae_loc_tmp['site_id'] = site_domain_results.site_id_random;
                ae_loc_tmp['site_domain_id'] = site_domain_results.site_domain_id_random;
                ae_loc_tmp['site_enable'] = site_domain_results.enable;
                ae_loc_tmp['site_style_href'] = site_domain_results.style_href;
                ae_loc_tmp['site_google_tracking_id'] = site_domain_results.google_tracking_id;
                ae_loc_tmp['site_cfg_json'] = site_domain_results.cfg_json;

                // Get updated the data just in case.
                // ae_loc_tmp = get(ae_loc);
                // ae_loc_tmp.account_id = site_domain_results.account_id_random;
                // ae_loc_tmp.core = ae_core;
                // ae_loc.set(ae_loc_tmp);
                // console.log(`ae_loc = `, get(ae_loc));
            }

            return true;
        })

        .then(async function (results) {

            ds_code = 'hub__page__access_code_li_json';
            await handle_get_data_store_obj_w_code({code: ds_code, data_type: 'json'})
            .then(function (access_code_li_json_results) {
                if (access_code_li_json_results) {
                    // console.log(`ae_ access_code_li_json_results = `, access_code_li_json_results);

                    // ae_loc_tmp = get(ae_loc);
                    ae_loc_tmp = {
                        ...ae_loc_tmp,
                        'access_code_li': access_code_li_json_results,
                    }

                    // ae_loc_tmp = get(ae_loc);
                    // let code = 'hub__page__access_code_li_json';

                    ds_code_li[ds_code] = access_code_li_json_results;
                    // ae_loc.set(ae_loc_tmp);
                    // console.log(`ae_loc = `, get(ae_loc));
                }
            }
            );

            return true;
        })

        .then(async function (results) {
            // We are intentionally loading these in series, not parallel to limit the number of simultaneous requests.

            // let ae_loc_tmp = get(ae_loc);

            // Loading the header and footer in series, not parallel.
            ds_code = 'hub__site__appshell_header';
            await handle_get_data_store_obj_w_code({code: ds_code})
            .then(function (ds_hub_site_header_results) {

                if (ds_hub_site_header_results) {
                    // console.log(`ae_ ds_hub_site_header_results = `, ds_hub_site_header_results);
                    // let ae_loc_tmp = get(ae_loc);

                    ds_code_li[ds_code] = ds_hub_site_header_results;

                    // ae_loc.set(ae_loc_tmp);
                    // console.log(`ae_loc = `, get(ae_loc));
                }

            })

            .then(async function () {

                ds_code = 'hub__site__appshell_footer';
                await handle_get_data_store_obj_w_code({code: ds_code})
                .then(function (ds_hub_site_footer_results) {
                    if (ds_hub_site_footer_results) {
                        // console.log(`ae_ hub__site__appshell_footer = `, ds_hub_site_footer_results);
                        // let ae_loc_tmp = get(ae_loc);

                        ds_code_li[ds_code] = ds_hub_site_footer_results;

                        // ae_loc.set(ae_loc_tmp);
                        // console.log(`ae_loc = `, get(ae_loc));
                    }
                });

            })

            .then(async function () {

                ds_code = 'hub__site__root_page_content';
                await handle_get_data_store_obj_w_code({code: ds_code})
                .then(function (ds_code_results) {
                    if (ds_code_results) {
                        // console.log(`ae_ hub__site__root_page_content = `, ds_code_results);
                        // let ae_loc_tmp = get(ae_loc);

                        ds_code_li[ds_code] = ds_code_results;

                        // ae_loc.set(ae_loc_tmp);
                        // console.log(`ae_loc = `, get(ae_loc));
                    }
                });

            })

            .then(async function () {

                // Loading the header and footer in series, not parallel.
                ds_code = 'hub__page__appshell_header_lead';
                await handle_get_data_store_obj_w_code({code: ds_code})
                .then(function (ds_code_results) {
                    if (ds_code_results) {
                        // console.log(`ae_ hub__page__appshell_header_lead = `, ds_code_results);
                        // let ae_loc_tmp = get(ae_loc);

                        ds_code_li[ds_code] = ds_code_results;

                        // ae_loc.set(ae_loc_tmp);
                        // console.log(`ae_loc = `, get(ae_loc));
                    }
                });

            })

            .then(async function () {

                ds_code = 'hub__page__appshell_header_trail';
                await handle_get_data_store_obj_w_code({code: ds_code})
                .then(function (ds_code_results) {
                    if (ds_code_results) {
                        // console.log(`hub__page__appshell_header_trail = `, ds_code_results);
                        // let ae_loc_tmp = get(ae_loc);

                        ds_code_li[ds_code] = ds_code_results;

                        // ae_loc.set(ae_loc_tmp);
                        // console.log(`ae_loc = `, get(ae_loc));
                    }
                });

            });

        })
        .finally(function () {

            let iframe = url.searchParams.get('iframe');
            // console.log(`iframe = `, iframe);
            if (iframe == 'true') {
                data_struct['iframe'] = iframe;

                ae_loc_tmp.iframe = iframe;
            } else if (iframe == 'false') {
                data_struct['iframe'] = false;
                ae_loc_tmp.iframe = false;
            }

            // console.log(`ae_ ds_code_li = `, ds_code_li);
            ae_loc_tmp = {
                ...ae_loc_tmp,
                'ds': ds_code_li,
            }


            // console.log(`ae_loc_tmp = `, ae_loc_tmp);
            data_struct['ae_loc'] = ae_loc_tmp;

            ae_loc.set(ae_loc_tmp);
            // console.log(`ae_loc = `, get(ae_loc));

            data_struct['ae_ds'] = ds_code_li;

            console.log(`ae_root +layout.ts loaded initial DS`);

            return true;
        });

        // let ae_loc_tmp = get(ae_loc);
        // let iframe = url.searchParams.get('iframe');
        // console.log(`iframe = `, iframe);
        // if (iframe == 'true') {
        //     data_struct['iframe'] = iframe;

        //     ae_loc_tmp.iframe = iframe;
        // } else if (iframe == 'false') {
        //     data_struct['iframe'] = false;
        //     ae_loc_tmp.iframe = false;
        // }
        // ae_loc.set(ae_loc_tmp);


        // if (site_domain_results) {
        //     console.log(`site_domain_results = `, site_domain_results);

        //     ae_api['account_id'] = site_domain_results.account_id_random;
        //     // ae_api['headers']['account_id'] = site_domain_results.account_id_random;
        //     ae_api.set(ae_api);
        //     console.log(`ae_api = `, ae_api);

        //     ae_core = {
        //         'account_id': site_domain_results.account_id_random,
        //         'site_id': site_domain_results.site_id_random,
        //         'site_domain_id': site_domain_results.site_domain_id_random,
        //         'enable': site_domain_results.enable,
        //         'style_href': site_domain_results.style_href,
        //         'google_tracking_id': site_domain_results.google_tracking_id,
        //     }


        //     access_code_li_json = handle_get_data_store_obj_w_code({code: 'hub__page__access_code_li_json', data_type: 'json'});

        //     if (access_code_li_json) {
        //         console.log(`access_code_li_json = `, access_code_li_json);

        //         ae_core = {
        //             ...ae_core,
        //             'access_code_li': access_code_li_json,
        //         }
        //     }
        // }

        // data_struct['ae_loc'] = loading_results;
        console.log(`ae_root +layout.ts load after DS loading?`);
        return data_struct;
    }

    // Currently we should never make it to this point! 2024-03-06
    console.log(`ae_root +layout.ts load function end`);
    return data_struct;
}


async function handle_load_ae_obj_id__site_domain({fqdn, try_cache=false}) {
    console.log(`*** handle_load_ae_obj_id__site_domain() *** fqdn=${fqdn}`);

    let params = {};

	// ae_loc.hub.site_domain_id_qry_status = 'loading';
    let ae_site_domain_obj_get_promise = api.get_ae_obj_id_crud({
        api_cfg: get(ae_api),
        no_account_id: true,
        obj_type: 'site_domain',
        obj_id: fqdn, // NOTE: This is the FQDN, not normally the ID.
        use_alt_table: true, // NOTE: This will use the table_name_alt value instead of the table_name value in the API config.
        use_alt_base: true, // NOTE: This will use the base_name_alt value instead of the base_name value in the API config.
        params: params,
        log_lvl: 0
        })
    .then(function (site_domain_obj_get_result) {
        if (site_domain_obj_get_result) {
            // slct.site_domain_obj = site_domain_obj_get_result;
            // console.log(`site_domain object:`, get(slct).site_domain_obj);

            // ae_loc.account_id = $slct.site_domain_obj.account_id_random;
            // ae_loc.site_id = $slct.site_domain_obj.site_id_random;
            // ae_loc.site_domain_id = $slct.site_domain_obj.site_domain_id_random;
            return site_domain_obj_get_result;
        } else {
            console.log('No results returned.');
            return null;
        }
    })
    .catch(function (error) {
        console.log('No results returned or failed.', error);
    });

    return ae_site_domain_obj_get_promise;
}

// let ds_obj_get_promises: key_val = {};
async function handle_get_data_store_obj_w_code({ code=null, data_type='text' }) {
    console.log(`*** handle_get_data_store_obj_w_code() *** code=${code}`);

    if (!code) {
        console.log('No code provided.');
        return;
    }

    let data_store_obj_get_promise = api.get_data_store_obj_w_code({
        api_cfg: get(ae_api),
        data_store_code: code,
        data_type: data_type,
        log_lvl: 0
        })
    .then(function (get_data_store_result) {
        let return_this = null;
        if (get_data_store_result) {

            if (data_type == 'text') {
                // console.log(get_data_store_result.text);
                return_this = get_data_store_result.text;
            } else if (data_type == 'json') {
                // console.log(get_data_store_result.json);
                return_this = get_data_store_result.json;
            }

        } else {
            console.log('No results returned.');
            return_this = null;
        }
        return return_this;
    })
    .catch(function (error) {
        console.log('No results returned or failed.', error);
    });

    return data_store_obj_get_promise;
}
