import React, { useState, useEffect } from 'react'; import { Toaster } from 'react-hot-toast'; import ChatInterface from './components/ChatInterface'; import Sidebar from './components/Sidebar'; import WelcomeScreen from './components/WelcomeScreen'; import { SunIcon, MoonIcon, HomeIcon } from '@heroicons/react/24/outline'; import ConversationStorage from './utils/conversationStorage'; function App() { const [darkMode, setDarkMode] = useState(false); const [sidebarOpen, setSidebarOpen] = useState(false); const [chatStarted, setChatStarted] = useState(false); const [conversations, setConversations] = useState([]); const [activeConversationId, setActiveConversationId] = useState(null); useEffect(() => { // Check for saved theme preference or default to light mode const savedTheme = localStorage.getItem('theme'); const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches; if (savedTheme === 'dark' || (!savedTheme && prefersDark)) { setDarkMode(true); document.documentElement.classList.add('dark'); } // Load conversations from localStorage const savedConversations = ConversationStorage.loadConversations(); if (savedConversations.length > 0) { setConversations(savedConversations); setChatStarted(true); // Set the most recent conversation as active setActiveConversationId(savedConversations[0].id); } }, []); const toggleDarkMode = () => { setDarkMode(!darkMode); if (darkMode) { document.documentElement.classList.remove('dark'); localStorage.setItem('theme', 'light'); } else { document.documentElement.classList.add('dark'); localStorage.setItem('theme', 'dark'); } }; const startNewChat = () => { const newConversation = { id: Date.now().toString(), title: 'New Conversation', messages: [], createdAt: new Date(), updatedAt: new Date(), }; // Save to localStorage ConversationStorage.addConversation(newConversation); setConversations(prev => [newConversation, ...prev]); setActiveConversationId(newConversation.id); setChatStarted(true); setSidebarOpen(false); }; const deleteConversation = (conversationId) => { // Delete from localStorage ConversationStorage.deleteConversation(conversationId); setConversations(prev => prev.filter(conv => conv.id !== conversationId)); // If the deleted conversation was active, switch to another one if (activeConversationId === conversationId) { const remainingConversations = conversations.filter(conv => conv.id !== conversationId); if (remainingConversations.length > 0) { setActiveConversationId(remainingConversations[0].id); } else { setActiveConversationId(null); setChatStarted(false); } } }; const updateConversations = (updatedConversations) => { setConversations(updatedConversations); // Save to localStorage ConversationStorage.saveConversations(updatedConversations); }; const handleFirstMessage = (message) => { if (!chatStarted) { startNewChat(); } }; const goBackToHome = () => { setActiveConversationId(null); setChatStarted(false); setSidebarOpen(false); }; return (