import { useState, useEffect, useRef } from 'react' import { MessageCircle, X, Send, Loader } from 'lucide-react' import { connectSocket } from '../../features/chat/socketClient' import { useAuthStore } from '../../store/authStore' import { api } from '../../lib/axios' export function SupportWidget() { const [open, setOpen] = useState(false) const [messages, setMessages] = useState([]) const [input, setInput] = useState('') const [convId, setConvId] = useState(null) const [loading, setLoading] = useState(false) const user = useAuthStore(s => s.user) const accessToken = useAuthStore(s => s.accessToken) const inputRef = useRef(null) const listRef = useRef(null) useEffect(() => { if (!open || !accessToken) return const socket = connectSocket(accessToken) const handler = (msg) => { if (msg.conversationId === convId) { setMessages(prev => [...prev, msg]) } } socket.on('chat:newMessage', handler) return () => socket.off('chat:newMessage', handler) }, [open, accessToken, convId]) useEffect(() => { if (listRef.current) listRef.current.scrollTop = listRef.current.scrollHeight }, [messages]) const handleOpen = async () => { setOpen(true) if (!user || convId) return setLoading(true) try { const res = await api.post('/chat/direct', { clientId: user.id, title: 'دعم فني' }) setConvId(res.data.conversation.id) } catch { /* fail */ } setLoading(false) } const handleSend = async () => { if (!input.trim() || !convId || !accessToken) return const text = input.trim() setInput('') setMessages(prev => [...prev, { id: 'temp-' + Date.now(), content: text, senderId: user?.id }]) const socket = connectSocket(accessToken) socket.emit('chat:message', { conversationId: convId, content: text }) } if (!user) return null return (
{open && (

الدعم الفني

نرد عليك في أقرب وقت

{loading &&
} {messages.length === 0 && !loading && (

اكتب رسالتك وسنرد عليك

)} {messages.map((msg, i) => { const isOwn = msg.senderId === user?.id return (

{msg.content}

{new Date(msg.createdAt || Date.now()).toLocaleTimeString('ar-EG', { hour: '2-digit', minute: '2-digit' })}

) })}
setInput(e.target.value)} onKeyDown={e => e.key === 'Enter' && handleSend()} placeholder="اكتب رسالتك..." className="flex-1 text-sm border border-gray-200 rounded-xl px-3 py-2 outline-none focus:border-brand-400" />
)}
) }