class ModalComponent { static showLogin() { const modalHTML = `
`; this.showCustomModal('login-modal', modalHTML); this.setupLoginForm(); } static showRegister() { const modalHTML = ` `; this.showCustomModal('register-modal', modalHTML); this.setupRegisterForm(); } static showCustomModal(modalId, contentHTML) { // بستن مودال قبلی this.closeCurrentModal(); const modalContainer = document.getElementById('modalContainer'); if (!modalContainer) return; const modalElement = document.createElement('div'); modalElement.id = modalId; modalElement.innerHTML = contentHTML; modalContainer.appendChild(modalElement); // بستن مودال با کلیک روی overlay const overlay = modalElement.querySelector('.modal-overlay'); if (overlay) { overlay.addEventListener('click', (e) => { if (e.target === overlay) { this.closeCurrentModal(); } }); } // بستن مودال با کلید Escape const escapeHandler = (e) => { if (e.key === 'Escape') { this.closeCurrentModal(); document.removeEventListener('keydown', escapeHandler); } }; document.addEventListener('keydown', escapeHandler); // ذخیره handler برای حذف بعدی modalElement._escapeHandler = escapeHandler; } static closeCurrentModal() { const modalContainer = document.getElementById('modalContainer'); if (!modalContainer) return; // حذف همه مودالها while (modalContainer.firstChild) { const modal = modalContainer.firstChild; if (modal._escapeHandler) { document.removeEventListener('keydown', modal._escapeHandler); } modalContainer.removeChild(modal); } } static setupLoginForm() { const loginForm = document.getElementById('modalLoginForm'); if (!loginForm) return; loginForm.addEventListener('submit', async (e) => { e.preventDefault(); const formData = new FormData(loginForm); const data = { username: formData.get('username').trim(), password: formData.get('password') }; // اعتبارسنجی const validation = ValidationMiddleware.validateLoginData(data); if (!validation.isValid) { Utils.showNotification(validation.errors.join(' • '), 'error'); return; } const submitBtn = loginForm.querySelector('button[type="submit"]'); const originalText = submitBtn.textContent; submitBtn.disabled = true; submitBtn.textContent = '⏳ در حال ورود...'; try { const result = authManager.loginUser(data.username, data.password); if (result.success) { authManager.setToken(result.token); authManager.setCurrentUser(result.user); Utils.showNotification('ورود موفقیتآمیز!', 'success'); this.closeCurrentModal(); // ارسال event برای بهروزرسانی UI document.dispatchEvent(new CustomEvent('authStateChanged')); } else { Utils.showNotification(result.message, 'error'); } } catch (error) { console.error('Login error:', error); Utils.showNotification('خطا در ورود به سیستم', 'error'); } finally { submitBtn.disabled = false; submitBtn.textContent = originalText; } }); } static setupRegisterForm() { const registerForm = document.getElementById('modalRegisterForm'); if (!registerForm) return; registerForm.addEventListener('submit', async (e) => { e.preventDefault(); const formData = new FormData(registerForm); const data = { firstName: formData.get('firstName')?.trim(), lastName: formData.get('lastName')?.trim(), username: formData.get('username').trim(), email: formData.get('email').trim(), password: formData.get('password'), confirmPassword: formData.get('confirmPassword') }; // اعتبارسنجی const validation = ValidationMiddleware.validateRegisterData(data); if (!validation.isValid) { Utils.showNotification(validation.errors.join(' • '), 'error'); return; } const submitBtn = registerForm.querySelector('button[type="submit"]'); const originalText = submitBtn.textContent; submitBtn.disabled = true; submitBtn.textContent = '⏳ در حال ثبت نام...'; try { const profile = { fullName: `${data.firstName || ''} ${data.lastName || ''}`.trim() }; const result = authManager.registerUser( data.username, data.email, data.password, 'student', profile ); if (result.success) { Utils.showNotification('حساب کاربری با موفقیت ایجاد شد!', 'success'); this.closeCurrentModal(); // نمایش فرم ورود setTimeout(() => { this.showLogin(); }, 1500); } else { Utils.showNotification(result.message, 'error'); } } catch (error) { console.error('Registration error:', error); Utils.showNotification('خطا در ایجاد حساب کاربری', 'error'); } finally { submitBtn.disabled = false; submitBtn.textContent = originalText; } }); } static showMessage(title, message, type = 'info') { const modalHTML = ` `; this.showCustomModal('message-modal', modalHTML); } static showError(message) { this.showMessage('❌ خطا', message, 'error'); } static showSuccess(message) { this.showMessage('✅ موفقیت', message, 'success'); } }