import React, { useState, useRef, useEffect } from 'react'; import logo from './assets/logo.jpg'; import './App.css'; import { VideoManagerLocal } from './utils/VideoManagerLocal'; import Home from './components/Home'; import FocusPageLocal from './components/FocusPageLocal'; import Achievement from './components/Achievement'; import Records from './components/Records'; import Help from './components/Help'; function App() { const [activeTab, setActiveTab] = useState('home'); const videoManagerRef = useRef(null); const [isSessionActive, setIsSessionActive] = useState(false); const [sessionResult, setSessionResult] = useState(null); const [isTutorialActive, setIsTutorialActive] = useState(false); useEffect(() => { fetch('/api/history', { method: 'DELETE' }) .then(() => { const backup = localStorage.getItem('focus_magic_backup'); if (backup) { try { const sessions = JSON.parse(backup); fetch('/api/import', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(sessions) }); console.log("History auto-recovered from browser cache."); } catch (err) { console.error("Failed to read magic backup", err); } } }) .catch(err => console.error(err)); const callbacks = { onSessionStart: () => { setIsSessionActive(true); setSessionResult(null); }, onSessionEnd: (summary) => { setIsSessionActive(false); if (summary) setSessionResult(summary); fetch('/api/sessions?filter=all') .then(res => res.json()) .then(data => { if (data && Array.isArray(data)) { localStorage.setItem('focus_magic_backup', JSON.stringify(data)); console.log("Session auto-saved to browser cache."); } }) .catch(err => console.error("Auto-save failed", err)); } }; videoManagerRef.current = new VideoManagerLocal(callbacks); return () => { if (videoManagerRef.current) videoManagerRef.current.stopStreaming(); }; }, []); const handleAvatarClick = () => { setActiveTab('home'); }; return (
{activeTab === 'home' && } {activeTab === 'achievement' && } {activeTab === 'records' && } {activeTab === 'help' && }
); } export default App;