import React, { useState, useEffect, useRef } from 'react'; const ChatModal = ({ isOpen, onClose, requestId, currentUser, chatPartnerName, activeChat, setActiveChat }) => { const [messages, setMessages] = useState([]); const [newMessage, setNewMessage] = useState(''); const [loading, setLoading] = useState(false); const messagesEndRef = useRef(null); // Map activeChat properties if passed as an object (as in Passenger/PoolHost dashboards) const actualIsOpen = isOpen ?? activeChat?.isOpen; const actualRequestId = requestId ?? activeChat?.requestId; const actualChatPartnerName = chatPartnerName ?? activeChat?.driverName ?? activeChat?.passengerName ?? 'Partner'; const actualOnClose = onClose ?? (() => setActiveChat?.({ ...activeChat, isOpen: false })); const fetchMessages = async () => { if (!actualRequestId) return; try { const token = localStorage.getItem('token'); const res = await fetch(`/api/messages/${actualRequestId}`, { headers: { 'Authorization': `Bearer ${token}` } }); if (res.ok) { const data = await res.json(); setMessages(data); } } catch (e) { console.error("Failed to fetch messages:", e); } }; useEffect(() => { if (actualIsOpen && actualRequestId) { fetchMessages(); const intervalId = setInterval(fetchMessages, 3000); return () => clearInterval(intervalId); } }, [actualIsOpen, actualRequestId]); useEffect(() => { messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' }); }, [messages]); const handleSendMessage = async (e) => { e.preventDefault(); if (!newMessage.trim() || !actualRequestId) return; setLoading(true); try { const token = localStorage.getItem('token'); const res = await fetch(`/api/messages/${actualRequestId}`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${token}` }, body: JSON.stringify({ sender_id: currentUser.id, content: newMessage.trim() }) }); if (res.ok) { setNewMessage(''); fetchMessages(); } } catch (err) { console.error("Failed to send message:", err); } finally { setLoading(false); } }; if (!actualIsOpen) return null; return (
e.stopPropagation()}>

Chat with {actualChatPartnerName}

{messages.length === 0 ? (
No messages yet. Say hi!
) : ( messages.map((msg, index) => { const isMine = msg.sender_id === currentUser.id; return (
{msg.content}
{new Date(msg.created_at).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}
); }) )}
setNewMessage(e.target.value)} placeholder="Type a message..." className="flex-1 px-4 py-2.5 rounded-full border border-white/10 bg-surface-base/80 text-white text-xs outline-none focus:border-primary transition-colors placeholder:text-white/20" />
); }; export default ChatModal;