import { updateTranslations, getCurrentLanguage } from './i18n.js'; async function apiCall(url, options = {}) { try { const response = await fetch(url, { ...options, credentials: 'include', headers: { 'Content-Type': 'application/json', ...options.headers } }); const data = await response.json(); return { success: response.ok, data, status: response.status }; } catch (error) { return { success: false, data: { message: error.message }, status: 500 }; } } async function checkAuth() { const result = await apiCall('/api/check-auth'); if (result.success && result.data.authenticated) { updateUIForLoggedIn(result.data.email); return true; } updateUIForLoggedOut(); return false; } function toggleAccountMenu() { const menu = document.getElementById('account-menu'); if (menu) { menu.classList.toggle('hidden'); } } function updateUIForLoggedIn(email) { const signInBtn = document.getElementById('sign-in-btn'); const accountMenu = document.getElementById('account-menu'); const mobileSignInBtn = document.getElementById('mobile-sign-in-btn'); const mobileAccountMenu = document.getElementById('mobile-account-menu'); if (signInBtn) { signInBtn.textContent = email || 'Dashboard'; signInBtn.onclick = (event) => { event.preventDefault && event.preventDefault(); toggleAccountMenu(); }; } if (accountMenu) { accountMenu.classList.remove('hidden'); accountMenu.classList.add('hidden'); } if (mobileSignInBtn) { mobileSignInBtn.textContent = email || 'Dashboard'; mobileSignInBtn.onclick = (event) => { event.preventDefault && event.preventDefault(); if (mobileAccountMenu) { mobileAccountMenu.classList.toggle('hidden'); } }; } if (mobileAccountMenu) { mobileAccountMenu.classList.add('hidden'); } updateTranslations(); } function updateUIForLoggedOut() { const signInBtn = document.getElementById('sign-in-btn'); const accountMenu = document.getElementById('account-menu'); const mobileSignInBtn = document.getElementById('mobile-sign-in-btn'); const mobileAccountMenu = document.getElementById('mobile-account-menu'); if (signInBtn) { signInBtn.textContent = 'Sign In'; signInBtn.onclick = (event) => { if (typeof window.navigateTo === 'function') { window.navigateTo('login', event); } }; } if (accountMenu) { accountMenu.classList.add('hidden'); } if (mobileSignInBtn) { mobileSignInBtn.textContent = 'Sign In'; mobileSignInBtn.onclick = (event) => { if (typeof window.navigateTo === 'function') { window.navigateTo('login', event); if (typeof window.closeMobileMenu === 'function') { window.closeMobileMenu(); } } }; } if (mobileAccountMenu) { mobileAccountMenu.classList.add('hidden'); } updateTranslations(); } async function handleLogout() { const result = await apiCall('/api/logout', { method: 'POST' }); if (result.success) { updateUIForLoggedOut(); if (typeof window.navigateTo === 'function') { window.navigateTo('home', { preventDefault: () => {} }); } } else { alert(result.data?.message || (getCurrentLanguage() === 'az' ? 'Sistemdən çıxışda xəta.' : 'Error logging out.')); } } async function handleLogin(event) { event.preventDefault(); const email = document.getElementById('login-email').value; const password = document.getElementById('login-password').value; const successDiv = document.getElementById('auth-success'); successDiv.classList.remove('hidden'); successDiv.textContent = getCurrentLanguage() === 'az' ? 'Yüklənir...' : 'Loading...'; successDiv.classList.remove('bg-red-100', 'text-red-700'); successDiv.classList.add('bg-blue-100', 'text-blue-700'); const result = await apiCall('/api/login', { method: 'POST', body: JSON.stringify({ email, password, lang: getCurrentLanguage() }) }); if (result.success) { successDiv.textContent = '✓ ' + result.data.message; successDiv.classList.remove('bg-blue-100', 'text-blue-700', 'bg-red-100', 'text-red-700'); successDiv.classList.add('bg-green-100', 'text-green-700'); updateUIForLoggedIn(email); setTimeout(() => { if (typeof window.navigateTo === 'function') { window.navigateTo('dashboard', event); } successDiv.classList.add('hidden'); document.getElementById('login-form').reset(); }, 1500); } else { successDiv.textContent = '✗ ' + result.data.message; successDiv.classList.remove('bg-blue-100', 'text-blue-700', 'bg-green-100', 'text-green-700'); successDiv.classList.add('bg-red-100', 'text-red-700'); setTimeout(() => { successDiv.classList.add('hidden'); }, 3000); } } async function handleSignup(event) { event.preventDefault(); const email = document.getElementById('signup-email').value; const password = document.getElementById('signup-password').value; const confirm = document.getElementById('signup-confirm').value; const successDiv = document.getElementById('auth-success'); if (password !== confirm) { successDiv.textContent = getCurrentLanguage() === 'az' ? '✗ Şifrələr uyğun deyil!' : '✗ Passwords do not match!'; successDiv.classList.remove('bg-green-100', 'text-green-700'); successDiv.classList.add('bg-red-100', 'text-red-700'); successDiv.classList.remove('hidden'); setTimeout(() => { successDiv.classList.add('hidden'); }, 2500); return; } successDiv.classList.remove('hidden'); successDiv.textContent = getCurrentLanguage() === 'az' ? 'Yüklənir...' : 'Loading...'; successDiv.classList.remove('bg-red-100', 'text-red-700'); successDiv.classList.add('bg-blue-100', 'text-blue-700'); const result = await apiCall('/api/signup', { method: 'POST', body: JSON.stringify({ email, password, lang: getCurrentLanguage() }) }); if (result.success) { successDiv.textContent = '✓ ' + result.data.message; successDiv.classList.remove('bg-blue-100', 'text-blue-700', 'bg-red-100', 'text-red-700'); successDiv.classList.add('bg-green-100', 'text-green-700'); setTimeout(() => { switchAuthTab('login'); successDiv.classList.add('hidden'); document.getElementById('signup-form').reset(); }, 2000); } else { successDiv.textContent = '✗ ' + result.data.message; successDiv.classList.remove('bg-blue-100', 'text-blue-700', 'bg-green-100', 'text-green-700'); successDiv.classList.add('bg-red-100', 'text-red-700'); setTimeout(() => { successDiv.classList.add('hidden'); }, 3000); } } export { apiCall, checkAuth, updateUIForLoggedIn, updateUIForLoggedOut, handleLogout, handleLogin, handleSignup, toggleAccountMenu };