import React, { useState, useEffect } from 'react'; import MainDashboard from './components/MainDashboard'; import ScryingPortal from './components/ScryingPortal'; import SocialFeatures from './components/SocialFeatures'; import NotificationSettings from './components/NotificationSettings'; import PerformanceOptimization from './components/PerformanceOptimization'; import MobileAppEnhancement from './components/MobileAppEnhancement'; import { Card, CardHeader, CardTitle, CardContent } from './components/ui/card'; import { Button } from './components/ui/button'; import { Input } from './components/ui/input'; import { User, Lock, Mail, BarChart3, Users, Settings, Zap, Smartphone, Home } from 'lucide-react'; const App = () => { const [user, setUser] = useState(null); const [loading, setLoading] = useState(true); const [loginForm, setLoginForm] = useState({ email: '', password: '' }); const [registering, setRegistering] = useState(false); const [currentView, setCurrentView] = useState('dashboard'); useEffect(() => { checkAuth(); registerServiceWorker(); }, []); const registerServiceWorker = async () => { if ('serviceWorker' in navigator) { try { const registration = await navigator.serviceWorker.register('/sw.js'); console.log('Service Worker registered:', registration); } catch (error) { console.error('Service Worker registration failed:', error); } } }; const checkAuth = async () => { const token = localStorage.getItem('token'); if (!token) { setLoading(false); return; } try { const response = await fetch('/api/v1/me', { headers: { 'Authorization': `Bearer ${token}` } }); if (response.ok) { const userData = await response.json(); setUser(userData); } else { localStorage.removeItem('token'); } } catch (error) { console.error('Auth check failed:', error); localStorage.removeItem('token'); } finally { setLoading(false); } }; const handleLogin = async (e) => { e.preventDefault(); setLoading(true); try { const response = await fetch('/api/v1/auth/login', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(loginForm) }); if (response.ok) { const data = await response.json(); localStorage.setItem('token', data.token); setUser(data.user); } else { const error = await response.json(); alert(error.detail || 'Login failed'); } } catch (error) { console.error('Login failed:', error); alert('Login failed. Please try again.'); } finally { setLoading(false); } }; const handleRegister = async (e) => { e.preventDefault(); setLoading(true); try { const response = await fetch('/api/v1/auth/register', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ ...loginForm, display_name: loginForm.email.split('@')[0] // Simple display name }) }); if (response.ok) { const data = await response.json(); localStorage.setItem('token', data.token); setUser(data.user); } else { const error = await response.json(); alert(error.detail || 'Registration failed'); } } catch (error) { console.error('Registration failed:', error); alert('Registration failed. Please try again.'); } finally { setLoading(false); } }; const handleLogout = () => { localStorage.removeItem('token'); setUser(null); }; if (loading) { return (

Loading...

); } if (!user) { return (
🔮
{registering ? 'Join the Academy' : 'Welcome to The Wizard\'s Grimoire'}

{registering ? 'Begin your magical journey and master daily spells' : 'Enter your sanctum to practice spells and unlock mystical powers' }

setLoginForm({ ...loginForm, email: e.target.value })} className="pl-10 border-purple-300 focus:border-purple-500" required />
setLoginForm({ ...loginForm, password: e.target.value })} className="pl-10 border-purple-300 focus:border-purple-500" required />
{!registering && (

🧙‍♂️ Demo: Use any incantation to create a practice realm

)}
); } // Navigation component const Navigation = () => (
); // Render current view const renderCurrentView = () => { switch (currentView) { case 'analytics': return ; case 'social': return ; case 'notifications': return ; case 'performance': return ; case 'mobile': return ; default: return ; } }; return (
{renderCurrentView()}
); }; export default App;