/** * 인증 관리 */ let currentUser = null; // 페이지 로드 시 인증 상태 확인 document.addEventListener('DOMContentLoaded', () => { checkAuthStatus(); setupLoginForm(); }); // 인증 상태 확인 function checkAuthStatus() { const token = localStorage.getItem('authToken'); const userData = localStorage.getItem('currentUser'); if (token && userData) { try { currentUser = JSON.parse(userData); showMainApp(); } catch (error) { console.error('사용자 데이터 파싱 실패:', error); logout(); } } else { showLoginScreen(); } } // 로그인 폼 설정 function setupLoginForm() { const loginForm = document.getElementById('loginForm'); if (loginForm) { loginForm.addEventListener('submit', handleLogin); } } // 로그인 처리 async function handleLogin(event) { event.preventDefault(); const username = document.getElementById('username').value; const password = document.getElementById('password').value; if (!username || !password) { alert('사용자명과 비밀번호를 입력해주세요.'); return; } try { showLoading(true); // 임시 로그인 (백엔드 구현 전까지) if (username === 'user1' && password === 'password123') { const mockUser = { id: 1, username: 'user1', email: 'user1@todo-project.local', full_name: '사용자1' }; currentUser = mockUser; localStorage.setItem('authToken', 'mock-token-' + Date.now()); localStorage.setItem('currentUser', JSON.stringify(mockUser)); showMainApp(); } else { throw new Error('잘못된 사용자명 또는 비밀번호입니다.'); } // 실제 API 호출 (백엔드 구현 후 사용) /* const response = await AuthAPI.login(username, password); currentUser = response.user; showMainApp(); */ } catch (error) { console.error('로그인 실패:', error); alert(error.message || '로그인에 실패했습니다.'); } finally { showLoading(false); } } // 로그아웃 function logout() { currentUser = null; localStorage.removeItem('authToken'); localStorage.removeItem('currentUser'); showLoginScreen(); } // 로그인 화면 표시 function showLoginScreen() { document.getElementById('loginScreen').classList.remove('hidden'); document.getElementById('mainApp').classList.add('hidden'); // 폼 초기화 const loginForm = document.getElementById('loginForm'); if (loginForm) { loginForm.reset(); } } // 메인 앱 표시 function showMainApp() { document.getElementById('loginScreen').classList.add('hidden'); document.getElementById('mainApp').classList.remove('hidden'); // 사용자 정보 표시 const currentUserElement = document.getElementById('currentUser'); if (currentUserElement && currentUser) { currentUserElement.textContent = currentUser.full_name || currentUser.username; } // Todo 목록 로드 if (typeof loadTodos === 'function') { loadTodos(); } } // 로딩 상태 표시 function showLoading(show) { const loadingOverlay = document.getElementById('loadingOverlay'); if (loadingOverlay) { if (show) { loadingOverlay.classList.remove('hidden'); } else { loadingOverlay.classList.add('hidden'); } } } // 전역으로 사용 가능하도록 export window.currentUser = currentUser; window.logout = logout; window.showLoading = showLoading;