/** * Page de configuration de la date anniversaire * Mise à jour de la date anniversaire et scan des blocs */ document.addEventListener('DOMContentLoaded', async () => { console.log('🎂 Birthday setup page loaded'); const status = document.getElementById('status') as HTMLDivElement; const progressBar = document.getElementById('progressBar') as HTMLDivElement; const continueBtn = document.getElementById('continueBtn') as HTMLButtonElement; try { // Étape 1: Connexion aux relais updateStatus('🌐 Connexion aux relais...', 'loading'); updateProgress(20); try { console.log('🔄 Importing services...'); const serviceModule = await import('../../services/service'); console.log('✅ Service module imported:', Object.keys(serviceModule)); // La classe Services est exportée par défaut const Services = serviceModule.default; if (!Services) { throw new Error('Services class not found in default export'); } console.log('🔄 Waiting for services to be ready...'); // Attendre que les services soient initialisés let attempts = 0; const maxAttempts = 30; const delayMs = 2000; let services; while (attempts < maxAttempts) { try { console.log(`🔄 Attempting to get services (attempt ${attempts + 1}/${maxAttempts})...`); services = await Services.getInstance(); console.log('✅ Services initialized successfully'); break; } catch (error) { console.log(`⏳ Services not ready yet (attempt ${attempts + 1}/${maxAttempts}):`, (error as Error).message); attempts++; if (attempts >= maxAttempts) { throw new Error(`Services failed to initialize after ${maxAttempts} attempts.`); } await new Promise(resolve => setTimeout(resolve, delayMs)); } } if (!services) { throw new Error('Services not initialized'); } // Connexion aux relais await services.connectAllRelays(); console.log('✅ Relays connected successfully'); // Étape 2: Mise à jour de la date anniversaire updateStatus('🎂 Mise à jour de la date anniversaire...', 'loading'); updateProgress(40); // Les relais sont déjà prêts après connectAllRelays console.log('✅ Communication handshake completed'); // Attendre que la hauteur de bloc soit définie avant de mettre à jour la date anniversaire updateStatus('⏳ Attente de la synchronisation avec le réseau...', 'loading'); let blockHeightAttempts = 0; const blockHeightMaxAttempts = 30; while (blockHeightAttempts < blockHeightMaxAttempts) { const blockHeight = services.getCurrentBlockHeight(); if (blockHeight !== -1) { console.log(`✅ Block height set: ${blockHeight}`); break; } console.log(`⏳ Waiting for block height (attempt ${blockHeightAttempts + 1}/${blockHeightMaxAttempts})...`); await new Promise(resolve => setTimeout(resolve, 100)); blockHeightAttempts++; } if (services.getCurrentBlockHeight() === -1) { throw new Error('Failed to get block height from relay'); } // Mettre à jour la date anniversaire du wallet await services.updateDeviceBlockHeight(); console.log('✅ Birthday updated successfully'); // Étape 3: Scan des blocs updateStatus('🔍 Scan des blocs en cours...', 'loading'); updateProgress(60); // Effectuer le scan initial des blocs await services.ensureCompleteInitialScan(); console.log('✅ Initial block scan completed'); // Étape 4: Synchronisation des processus updateStatus('🔄 Synchronisation des processus...', 'loading'); updateProgress(80); // Restaurer les processus depuis la base de données await services.restoreProcessesFromDB(); console.log('✅ Process synchronization completed'); } catch (error) { console.error('❌ Services not available:', error); updateStatus('❌ Erreur: Services non disponibles', 'error'); throw error; } // Étape 5: Finalisation updateStatus('✅ Configuration terminée avec succès!', 'success'); updateProgress(100); // Activer le bouton continuer continueBtn.disabled = false; console.log('🎉 Birthday setup completed successfully'); } catch (error) { console.error('❌ Error during birthday setup:', error); updateStatus('❌ Erreur lors de la configuration de la date anniversaire', 'error'); } // Gestion du bouton continuer continueBtn.addEventListener('click', async () => { console.log('🏠 Redirecting to main application...'); // Rediriger vers l'application principale console.log('🎂 Birthday setup completed, checking storage state...'); const { checkStorageStateAndNavigate } = await import('../../router'); await checkStorageStateAndNavigate(); }); function updateStatus(message: string, type: 'loading' | 'success' | 'error') { status.textContent = message; status.className = `status ${type}`; } function updateProgress(percent: number) { progressBar.style.width = `${percent}%`; } });