// Initialize Firebase const firebaseConfig = { apiKey: "AIzaSyDKL-6WhEMKBEeWepYlYEMf3QiHwFNgkSk", authDomain: "yonggi-students.firebaseapp.com", projectId: "yonggi-students", storageBucket: "yonggi-students.appspot.com", messagingSenderId: "140729683331", appId: "1:140729683331:web:4c644c61c01eea78e2bab6" }; // Initialize Firebase const app = firebase.initializeApp(firebaseConfig); const auth = firebase.auth(); const db = firebase.firestore(); const storage = firebase.storage(); // App state let currentUser = null; let currentUserData = null; let isSidebarCollapsed = false; // DOM elements const authView = document.getElementById('auth-view'); const mainAppView = document.getElementById('main-app-view'); const loginForm = document.getElementById('login-form-element'); const registerForm = document.getElementById('register-form-element'); const logoutBtn = document.getElementById('logout-btn'); const sidebarToggleBtn = document.getElementById('sidebar-toggle-btn'); const sidebar = document.getElementById('sidebar'); // Auth state listener auth.onAuthStateChanged(async (user) => { currentUser = user; if (user) { // User is signed in authView.classList.add('hidden'); mainAppView.classList.remove('hidden'); // Get user data from Firestore const userDoc = await db.collection('artifacts/tkquest-preview/public/data/users').doc(user.uid).get(); if (userDoc.exists) { currentUserData = userDoc.data(); updateUI(); } else { // Create new user doc if doesn't exist currentUserData = { name: user.email.split('@')[0], email: user.email, role: 'student', beltLevel: 'White' }; await db.collection('artifacts/tkquest-preview/public/data/users').doc(user.uid).set(currentUserData); updateUI(); } } else { // User is signed out authView.classList.remove('hidden'); mainAppView.classList.add('hidden'); } }); // Auth handlers loginForm.addEventListener('submit', async (e) => { e.preventDefault(); const email = document.getElementById('login-email').value; const password = document.getElementById('login-password').value; try { await auth.signInWithEmailAndPassword(email, password); loginForm.reset(); } catch (error) { document.getElementById('login-error').textContent = error.message; document.getElementById('login-error').classList.remove('hidden'); } }); registerForm.addEventListener('submit', async (e) => { e.preventDefault(); const email = document.getElementById('register-email').value; const password = document.getElementById('register-password').value; const name = document.getElementById('register-name').value; const beltLevel = document.getElementById('register-belt').value; try { const userCredential = await auth.createUserWithEmailAndPassword(email, password); const user = userCredential.user; // Create user document await db.collection('artifacts/tkquest-preview/public/data/users').doc(user.uid).set({ name: name, email: email, role: 'student', beltLevel: beltLevel, createdAt: firebase.firestore.FieldValue.serverTimestamp() }); // Initialize progress document await db.collection('artifacts/tkquest-preview/public/data/progress').doc(user.uid).set({ completedLessonIds: [], checklistProgress: {}, taskProgress: {}, challengeProgress: {} }); registerForm.reset(); } catch (error) { document.getElementById('register-error').textContent = error.message; document.getElementById('register-error').classList.remove('hidden'); } }); logoutBtn.addEventListener('click', () => { auth.signOut(); }); // Sidebar toggle sidebarToggleBtn.addEventListener('click', () => { isSidebarCollapsed = !isSidebarCollapsed; if (isSidebarCollapsed) { sidebar.classList.remove('w-64'); sidebar.classList.add('w-16'); document.body.classList.add('sidebar-collapsed'); } else { sidebar.classList.remove('w-16'); sidebar.classList.add('w-64'); document.body.classList.remove('sidebar-collapsed'); } }); // Update UI based on user data function updateUI() { if (!currentUser || !currentUserData) return; // Update user display document.getElementById('user-display').textContent = `Hi, ${currentUserData.name}`; document.getElementById('user-id-kbd').textContent = currentUser.uid.substring(0, 8); document.getElementById('update-name').value = currentUserData.name; // Update floating user info (student only) if (currentUserData.role === 'student') { document.getElementById('floating-user-info').classList.remove('hidden'); document.getElementById('float-user-name').textContent = currentUserData.name; document.getElementById('float-user-belt').textContent = currentUserData.beltLevel; document.getElementById('float-user-number').textContent = currentUser.uid.substring(0, 8); } else { document.getElementById('floating-user-info').classList.add('hidden'); } // Setup sidebar menu setupSidebarMenu(); // Show/hide instructor UI elements toggleInstructorUI(currentUserData.role === 'instructor'); // Load initial data loadInitialData(); } // Setup sidebar menu function setupSidebarMenu() { const menu = document.getElementById('sidebar-menu'); if (!menu || !currentUserData) return; const isInstructor = currentUserData.role === 'instructor'; let menuItems = [ { id: 'dashboard-page', icon: 'dashboard', text: 'Dashboard' }, { id: 'lessons-page', icon: 'curriculum', text: 'Curriculum' }, ]; if (isInstructor) { menuItems.push( { id: 'manage-users-page', icon: 'manage-users', text: 'Manage Students' } ); } else { menuItems.push( { id: 'my-progress-page', icon: 'progress', text: 'My Progress' } ); } menuItems.push( { id: 'tasks-page', icon: 'tasks', text: 'Tasks & Exercises' }, { id: 'events-page', icon: 'events', text: 'Events' }, { id: 'settings-page', icon: 'settings', text: 'Settings' }, { id: 'about-page', icon: 'info', text: 'About', href: 'about.html' } ); menu.innerHTML = menuItems.map(item => `
Belt Testing Seminar
December 10, 2023
10:00 AM - 12:00 PM
`; // Set mock recent activity const activityEl = document.getElementById('dashboard-notifications'); activityEl.innerHTML = `Completed Basic Stances lesson
Today, 3:45 PM
Received feedback on Kicking Techniques
Yesterday, 10:30 AM