if (!window['GOVBRDemos']) {
    window.GOVBRDemos = {
        componentes: {},
        /**
         *
         * @param {HTMLElement} host
         * @param {*} id
         */
        initDemoComponente: async (host, id) => {
            if (!id) {
                return;
            }
            host.innerHTML = '';
            for (const attr of host.attributes) {
                if (attr.name == 'id') {
                    attr.value = 'host';
                } else {
                    host.removeAttribute(attr.name);
                }
            }
            GOVBRPlataformaJS.bloqueiaElemento();
            let data = null;
            try {
                data = await (await fetch('./' + id + '/data.json')).json();
            } catch (ex) {
                GOVBRPlataformaJS.logs.error('Dados não encontrados: ' + id + '/data.json');
            }
            GOVBRPlataformaJS.desbloqueiaElemento();
            const init = GOVBRDemos.componentes[id](host, data);
            if (init instanceof Promise) {
                await init;
            }
        },
        addInitComponente: (id, fn) => {
            GOVBRDemos.componentes[id] = fn;
        },
    };

    const URL_CDN = '../../';
    window.addEventListener('load', async () => {
        GOVBRPlataformaJS.init(URL_CDN, false);

        const host = document.querySelector('#host');
        const navComponentes = document.querySelector('.componentes');
        document.querySelectorAll('.botao-selecao-componente').forEach((botao) => {
            const id = botao.getAttribute('data-id');
            botao.addEventListener('click', async () => {
                window.location.hash = id;
            });
        });
        const fnhashchange = async () => {
            const id = (window.location.hash || '#').substring(1);
            navComponentes.classList.add('desativado');
            let script = document.querySelector('#script-' + id);
            if (!script) {
                script = document.createElement('script');
                script.src = './' + id + '/index.js';
                script.id = 'script-' + id;
                document.head.append(script);
                script.addEventListener('error', async () => {
                    navComponentes.classList.remove('desativado');
                    script.remove();
                    throw new Error('Falha ao carregar ' + script.src);
                });
            }
            if (script.hasAttribute('data-carregado')) {
                navComponentes.classList.remove('desativado');
                await GOVBRDemos.initDemoComponente(host, id);
            } else {
                script.addEventListener('load', async () => {
                    navComponentes.classList.remove('desativado');
                    await GOVBRDemos.initDemoComponente(host, id);
                    script.setAttribute('data-carregado', '');
                });
            }
        };
        window.addEventListener('hashchange', fnhashchange);
        fnhashchange();
    });
}
