SENA

Sistema de Gestión

SENA

Bienvenido: Admin
⏳ Conectando...
Resumen
Fichas
Competencias
Ambientes
Instructores
Programación
Reportes

Cerrar Sesión
// Cargar preferencia de modo oscuro loadDarkModePreference(); updateConnectionStatus('connecting'); const supabaseReady = await initSupabase(); if (supabaseReady) { await connectToSupabase(); // � VERIFICAR SESIÓN EN LOCALSTORAGE PRIMERO const savedSession = localStorage.getItem('sena_session'); const savedUser = localStorage.getItem('sena_user'); if (savedSession === 'true' && savedUser) { try { const userData = JSON.parse(savedUser); console.log('💾 Sesión encontrada en localStorage:', userData.usuario); // Verificar que el usuario aún existe y está activo const { data: dbUser, error: dbError } = await supabaseClient .from('usuarios') .select('*') .eq('id', userData.id) .eq('activo', true) .single(); if (!dbError && dbUser) { currentUser = { id: dbUser.id, usuario: dbUser.usuario, permisos: dbUser.permisos }; console.log('✅ Sesión restaurada desde localStorage'); // Mostrar app document.getElementById('loginScreen').classList.remove('active'); document.getElementById('loginScreen').style.display = 'none'; document.getElementById('appContainer').classList.add('active'); document.getElementById('currentUser').textContent = currentUser.usuario; showSection('resumen'); } else { console.warn('⚠️ Usuario en localStorage no válido, limpiando...'); localStorage.removeItem('sena_user'); localStorage.removeItem('sena_session'); } } catch (error) { console.error('❌ Error restaurando sesión localStorage:', error); localStorage.removeItem('sena_user'); localStorage.removeItem('sena_session'); } } // �🔐 CONFIGURAR LISTENER DE AUTENTICACIÓN supabaseClient.auth.onAuthStateChange((event, session) => { console.log('🔔 Evento de autenticación:', event); if (event === 'SIGNED_IN' && session) { console.log('✅ Usuario autenticado'); console.log('🔑 Token expira:', new Date(session.expires_at * 1000)); } else if (event === 'SIGNED_OUT') { console.log('🚪 Usuario cerró sesión'); currentUser = null; } else if (event === 'TOKEN_REFRESHED') { console.log('🔄 Token renovado automáticamente'); console.log('🔑 Nuevo token expira:', new Date(session.expires_at * 1000)); } else if (event === 'USER_UPDATED') { console.log('👤 Usuario actualizado'); } }); } else { console.warn('⚠️ Supabase no disponible, usando solo localStorage'); updateConnectionStatus('error'); loadLocalData(); // Verificar localStorage como único sistema console.log('� Email:', session.user.email); console.log('🔑 Token expira:', new Date(session.expires_at * 1000)); // Extraer usuario del email const emailParts = session.user.email.split('@'); const username = emailParts[0]; console.log('🔍 Username extraído:', username); console.log('📋 Total usuarios en memoria:', USERS.length); // Buscar datos del usuario en la tabla con case-insensitive const { data: userData, error: userError } = await supabaseClient .from('usuarios') .select('*') .ilike('usuario', username) .eq('activo', true) .single(); console.log('📊 Resultado búsqueda:', { found: !!userData, error: userError?.message }); if (!userError && userData) { currentUser = { id: userData.id, usuario: userData.usuario, permisos: userData.permisos, authUser: session.user }; console.log('✅ Sesión restaurada para:', currentUser.usuario); // Mostrar app document.getElementById('loginScreen').classList.remove('active'); document.getElementById('loginScreen').style.display = 'none'; document.getElementById('appContainer').classList.add('active'); document.getElementById('currentUser').textContent = currentUser.usuario; // IMPORTANTE: Renderizar sección inicial showSection('resumen'); } else { console.error('❌ Usuario no encontrado en BD:', username); if (userError) console.error(' Error BD:', userError.message); // Intentar buscar en array local como fallback const localUser = USERS.find(u => u.usuario.toLowerCase() === username.toLowerCase() && u.activo === true ); if (localUser) { console.log('✅ Usuario encontrado en array local'); currentUser = { id: localUser.id, usuario: localUser.usuario, permisos: localUser.permisos, authUser: session.user }; document.getElementById('loginScreen').classList.remove('active'); document.getElementById('loginScreen').style.display = 'none'; document.getElementById('appContainer').classList.add('active'); document.getElementById('currentUser').textContent = currentUser.usuario; showSection('resumen'); } else { console.error('❌ Usuario tampoco en array local'); console.log('📋 Usuarios disponibles:', USERS.map(u => u.usuario)); await supabaseClient.auth.signOut(); } } } else { console.log('ℹ️ No hay sesión activa - mostrar login'); } } catch (error) { console.error('❌ Error verificando sesión Auth:', error); console.error(' Detalle:', error.message); console.error(' Stack:', error.stack); } } else { console.warn('⚠️ Supabase no disponible, usando solo localStorage'); updateConnectionStatus('error'); loadLocalData(); // Verificar localStorage como único sistema const savedSession = localStorage.getItem('sena_session'); const savedUser = localStorage.getItem('sena_user'); if (savedSession === 'true' && savedUser) { try { currentUser = JSON.parse(savedUser); console.log('💾 Sesión restaurada desde localStorage (modo offline)'); document.getElementById('loginScreen').classList.remove('active'); document.getElementById('loginScreen').style.display = 'none'; document.getElementById('appContainer').classList.add('active'); document.getElementById('currentUser').textContent = currentUser.usuario; showSection('resumen'); } catch (error) { console.error('❌ Error con sesión local:', error); localStorage.removeItem('sena_user'); localStorage.removeItem('sena_session'); } } else { console.log('ℹ️ No hay sesión guardada - mostrar login'); } } setupEventListeners(); await initEmailJS(); // Cargar estado del sidebar loadSidebarState(); // Inicializar iconos Lucide if (typeof lucide !== 'undefined') { lucide.createIcons(); } console.log('✅ Aplicación lista'); console.log('👤 Usuario actual:', currentUser ? currentUser.usuario : 'No autenticado'); } window.addEventListener('load', initApp);