import React, { useState, useEffect, useCallback } from 'react'; import { SCENARIOS } from './constants'; import { Scenario, SessionMode, UserSettings } from './types'; import ScenarioCard from './components/ScenarioCard'; import ChatSession from './components/ChatSession'; import VoiceSession from './components/VoiceSession'; import ScenarioGenerator from './components/ScenarioGenerator'; import CBTReference from './components/CBTReference'; import SettingsModal from './components/SettingsModal'; import Tooltip from './components/Tooltip'; import { Brain, Info, ShieldCheck, Filter, Plus, BookOpen, Activity, Zap, Settings } from 'lucide-react'; import { Button } from './components/ui/button'; const DEFAULT_SETTINGS: UserSettings = { voiceName: 'Zephyr', vocalStyle: 'Helpful', genderPreference: 'Neutral' }; const CUSTOM_SCENARIOS_KEY = 'cognitive-clarity-custom-scenarios'; const SETTINGS_KEY = 'cognitive-clarity-settings'; const App: React.FC = () => { const [activeScenario, setActiveScenario] = useState(null); const [sessionMode, setSessionMode] = useState('text'); const [selectedDifficulty, setSelectedDifficulty] = useState('All'); const [isPreparing, setIsPreparing] = useState(false); // Custom Scenarios State with LocalStorage persistence const [customScenarios, setCustomScenarios] = useState(() => { try { const saved = localStorage.getItem(CUSTOM_SCENARIOS_KEY); return saved ? JSON.parse(saved) : []; } catch (e) { console.error("Failed to load custom scenarios", e); return []; } }); const [showGenerator, setShowGenerator] = useState(false); const [showReference, setShowReference] = useState(false); const [showSettings, setShowSettings] = useState(false); // User Settings State const [userSettings, setUserSettings] = useState(() => { const saved = localStorage.getItem(SETTINGS_KEY); return saved ? JSON.parse(saved) : DEFAULT_SETTINGS; }); // Save scenarios whenever they change useEffect(() => { localStorage.setItem(CUSTOM_SCENARIOS_KEY, JSON.stringify(customScenarios)); }, [customScenarios]); // Save settings whenever they change useEffect(() => { localStorage.setItem(SETTINGS_KEY, JSON.stringify(userSettings)); }, [userSettings]); const handleSelectScenario = (scenario: Scenario, mode: SessionMode) => { setIsPreparing(true); setTimeout(() => { setActiveScenario(scenario); setSessionMode(mode); setIsPreparing(false); }, 1400); }; const handleExitSession = () => { setActiveScenario(null); }; const handleScenarioGenerated = (newScenario: Scenario) => { setCustomScenarios(prev => [newScenario, ...prev]); setShowGenerator(false); }; const handleDeleteScenario = useCallback((id: string) => { setCustomScenarios(prev => prev.filter(s => s.id !== id)); }, []); const allScenarios = [...customScenarios, ...SCENARIOS]; const filteredScenarios = allScenarios.filter(scenario => selectedDifficulty === 'All' || scenario.difficulty === selectedDifficulty ); const difficulties = ['All', 'Beginner', 'Intermediate', 'Advanced']; if (isPreparing) { return (

Initializing Session

Calibrating AI Parameters

Configuring {sessionMode === 'voice' ? 'Voice Link' : 'Neural Chat Bridge'}

Applying {userSettings.voiceName} Vocal Profile

); } if (activeScenario) { return (
{sessionMode === 'text' ? ( ) : (
)}
); } return (
{/* Modals */} {showGenerator && setShowGenerator(false)} />} {showReference && setShowReference(false)} />} {showSettings && setShowSettings(false)} />} {/* Hero Section */}

Cognitive Clarity

An adaptive clinical training environment designed to strengthen cognitive flexibility and navigate social friction.

Evidence-Based Framework
Vocal Partner: {userSettings.voiceName}
{/* Main Content */}

Training Scenarios

Difficulty
{difficulties.map((diff) => ( ))}
{filteredScenarios.map(scenario => ( ))}
); }; export default App;