import React, { useState, useEffect } from 'react'; import './App.css'; import ChatInterface from './components/ChatInterface'; import Panel from './components/Panel'; import Login from './components/Login'; import Signin from './components/Signin'; import AdminPanel from './components/AdminPanel'; function App() { const [isCollapsed, setIsCollapsed] = useState(false); const [messages, setMessages] = useState([]); const [conversations, setConversations] = useState([]); const [activeConversationId, setActiveConversationId] = useState(null); const [isAuthenticated, setIsAuthenticated] = useState(false); const [userName, setUserName] = useState(''); const [page, setPage] = useState("login"); const [userRole, setUserRole] = useState(''); useEffect(() => { const storedUserName = localStorage.getItem('userName'); const storedUserRole = localStorage.getItem('userRole'); if (storedUserName) { setUserName(storedUserName); setUserRole(storedUserRole); setIsAuthenticated(true); setPage("chat"); fetchConversations(); console.log("Role chargé depuis localStorage:", storedUserRole); } }, []); const fetchConversations = async () => { try { const response = await fetch('/api/conversations', { credentials: 'include', }); if (response.ok) { const data = await response.json(); const formattedConversations = data.conversations.map(conv => ({ id: conv._id, title: conv.title, date: conv.date, time: conv.time, lastMessage: conv.last_message })); setConversations(formattedConversations); } else { console.error('Erreur lors de la récupération des conversations'); } } catch (error) { console.error('Erreur:', error); } }; const refreshConversationList = async () => { await fetchConversations(); }; const loadConversationMessages = async (conversationId) => { try { const response = await fetch(`/api/conversations/${conversationId}/messages`, { credentials: 'include', }); if (response.ok) { const data = await response.json(); const formattedMessages = data.messages.map(msg => ({ sender: msg.sender, text: msg.text, timestamp: new Date(msg.timestamp) })); setMessages(formattedMessages); } } catch (error) { console.error('Erreur lors du chargement des messages:', error); } }; useEffect(() => { if (activeConversationId && isAuthenticated) { loadConversationMessages(activeConversationId); } }, [activeConversationId, isAuthenticated]); const toggleCollapse = () => { setIsCollapsed(!isCollapsed); }; const handleNewChat = () => { setActiveConversationId(null); setMessages([]); }; const handleMessageSent = async (message) => { let conversationId = activeConversationId; if (!conversationId) { const newChatData = { title: message.length > 15 ? message.substring(0, 15) + "..." : message, date: new Date().toLocaleDateString('fr-FR', { day: '2-digit', month: 'short' }), time: new Date().toLocaleTimeString('fr-FR', { hour: 'numeric', minute: 'numeric' }), message: message }; try { const response = await fetch('/api/conversations', { method: 'POST', headers: { 'Content-Type': 'application/json', }, credentials: 'include', body: JSON.stringify(newChatData) }); if (response.ok) { const data = await response.json(); conversationId = data.conversation_id; const newChat = { id: conversationId, title: newChatData.title, date: newChatData.date, time: newChatData.time }; setConversations([newChat, ...conversations]); setActiveConversationId(conversationId); await fetch(`/api/conversations/${conversationId}/messages`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, credentials: 'include', body: JSON.stringify({ sender: 'user', text: message }) }); } } catch (error) { console.error('Erreur lors de la création de la conversation:', error); return; } } else { try { await fetch(`/api/conversations/${conversationId}/messages`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, credentials: 'include', body: JSON.stringify({ sender: 'user', text: message }) }); } catch (error) { console.error('Erreur lors de l\'enregistrement du message:', error); } } return conversationId; }; const saveBotResponse = async (conversationId, botResponse, shouldSave = false) => { if (!conversationId || !shouldSave) return; try { await fetch(`/api/conversations/${conversationId}/messages`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, credentials: 'include', body: JSON.stringify({ sender: 'bot', text: botResponse }) }); } catch (error) { console.error('Erreur lors de l\'enregistrement de la réponse du bot:', error); } }; const handleLoginSuccess = () => { const storedUserName = localStorage.getItem('userName'); const storedUserRole = localStorage.getItem('userRole'); setUserName(storedUserName); setUserRole(storedUserRole); setIsAuthenticated(true); setPage(storedUserRole === "Administrateur" ? "Administrateur" : "chat"); fetchConversations(); }; const handleLogout = async () => { try { await fetch('/api/logout', { method: 'POST', credentials: 'include', }); localStorage.removeItem('userName'); localStorage.removeItem('userId'); localStorage.removeItem('userRole'); setIsAuthenticated(false); setUserName(''); setUserRole(''); setConversations([]); setMessages([]); setActiveConversationId(null); setPage("login"); } catch (error) { console.error("Erreur lors de la déconnexion:", error); } }; return (