/** * PAINEL DE ADMINISTRAÇÃO DE DADOS * * Interface para gerenciar o cache de dados, atualizar CSVs * e monitorar o status do sistema de dados. */ // Variáveis globais para gerenciamento de configurações let adminConfigManager = null; let backupManager = null; /** * Inicializa o sistema de configurações administrativas */ async function initAdminConfig() { try { // Evitar duplicação: todos os managers são carregados via index.html // Aguarde até que as classes e instâncias globais estejam disponíveis const ready = await waitForManagers(); if (!ready) { console.error('❌ Managers não carregados após tempo de espera.'); return false; } // Vincular instâncias globais, sem recriar adminConfigManager = window.adminConfigManager || (typeof AdminConfigManager !== 'undefined' ? new AdminConfigManager() : null); backupManager = window.backupManager || (typeof BackupManager !== 'undefined' ? new BackupManager() : null); console.log('✅ Sistema de configurações administrativas inicializado'); return true; } catch (error) { console.error('❌ Erro ao inicializar sistema de configurações:', error); return false; } } /** * Aguarda até que os managers essenciais estejam disponíveis * Retorna true quando AdminConfigManager, BackupManager e ToastManager existem */ async function waitForManagers(timeoutMs = 3000, intervalMs = 100) { const start = Date.now(); return new Promise((resolve) => { const check = () => { const classesReady = (typeof AdminConfigManager !== 'undefined') && (typeof BackupManager !== 'undefined') && (typeof ToastManager !== 'undefined'); const instancesReady = !!(window.adminConfigManager || window.backupManager || window.toastManager); if (classesReady || instancesReady) { resolve(true); return; } if (Date.now() - start >= timeoutMs) { resolve(false); return; } setTimeout(check, intervalMs); }; check(); }); } /** * Carrega um script dinamicamente * @param {string} src - Caminho do script * @returns {Promise} Promise que resolve quando o script for carregado */ function loadScript(src) { return new Promise((resolve, reject) => { const script = document.createElement('script'); script.src = src; script.onload = resolve; script.onerror = reject; document.head.appendChild(script); }); } /** * Abre o painel de administração de dados */ async function abrirPainelDados() { console.log('🔧 Abrindo painel de administração de dados'); // Inicializar sistema de configurações se necessário if (!adminConfigManager) { const configLoaded = await initAdminConfig(); if (!configLoaded) { alert('❌ Erro ao carregar sistema de configurações'); return; } } const stats = window.dataManager.getCacheStats(); const metadata = window.dataManager.getMetadata(); const adminConfig = adminConfigManager ? adminConfigManager.getConfig() : null; const modalHTML = `