"use client"; import { useState, useRef, useEffect } from "react"; import { motion, AnimatePresence } from "framer-motion"; import { Search, Send, Paperclip, ArrowRight, Phone, MoreVertical, Sparkles, Check, CheckCheck, MessageSquare, Mail, Smartphone, } from "lucide-react"; /* ───────────── types ───────────── */ type Channel = "whatsapp" | "email" | "sms"; type FilterTab = "all" | "whatsapp" | "email" | "sms"; interface Message { id: string; text: string; sent: boolean; // true = we sent, false = received time: string; read?: boolean; } interface Conversation { id: string; name: string; avatar: string; // initials avatarColor: string; channel: Channel; lastMessage: string; time: string; unread: number; messages: Message[]; } /* ───────────── channel config ───────────── */ const channelConfig: Record = { whatsapp: { icon: MessageSquare, color: "text-green-400 bg-green-400/20", label: "واتساب" }, email: { icon: Mail, color: "text-blue-400 bg-blue-400/20", label: "إيميل" }, sms: { icon: Smartphone, color: "text-purple-400 bg-purple-400/20", label: "رسائل" }, }; const filterTabs: { key: FilterTab; label: string }[] = [ { key: "all", label: "الكل" }, { key: "whatsapp", label: "واتساب" }, { key: "email", label: "إيميل" }, { key: "sms", label: "رسائل" }, ]; /* ───────────── sample data ───────────── */ const sampleConversations: Conversation[] = [ { id: "c1", name: "أحمد الغامدي", avatar: "أغ", avatarColor: "bg-green-600", channel: "whatsapp", lastMessage: "تمام، أرسل لي العرض على الإيميل", time: "١٠:٣٢", unread: 2, messages: [ { id: "m1", text: "السلام عليكم، عندكم حل CRM يدعم العربي؟", sent: false, time: "١٠:١٥" }, { id: "m2", text: "وعليكم السلام أحمد! أكيد، Dealix مصمم بالكامل للسوق السعودي", sent: true, time: "١٠:١٨", read: true }, { id: "m3", text: "كم السعر للباقة الاحترافية؟", sent: false, time: "١٠:٢٠" }, { id: "m4", text: "١٤٩ ر.س شهرياً مع تجربة مجانية ١٤ يوم", sent: true, time: "١٠:٢٥", read: true }, { id: "m5", text: "تمام، أرسل لي العرض على الإيميل", sent: false, time: "١٠:٣٢" }, ], }, { id: "c2", name: "سارة المطيري", avatar: "سم", avatarColor: "bg-blue-600", channel: "email", lastMessage: "شكراً على العرض التقديمي، سأرجع لكم بعد الاجتماع", time: "أمس", unread: 0, messages: [ { id: "m6", text: "مرحباً، أرغب بمعرفة المزيد عن خدمات تقييم العملاء بالذكاء الاصطناعي", sent: false, time: "أمس ٠٩:٠٠" }, { id: "m7", text: "أهلاً سارة! نظام تقييم العملاء يعتمد على ٤ محاور: التفاعل، الملف الشخصي، السلوك، ونية الشراء", sent: true, time: "أمس ٠٩:٤٥", read: true }, { id: "m8", text: "ممتاز، هل يمكنكم تقديم عرض لفريق من ١٥ شخص؟", sent: false, time: "أمس ١١:٣٠" }, { id: "m9", text: "بالتأكيد! أرفقت عرض الأسعار للباقة المؤسسية", sent: true, time: "أمس ١٤:٠٠", read: true }, { id: "m10", text: "شكراً على العرض التقديمي، سأرجع لكم بعد الاجتماع", sent: false, time: "أمس ١٦:٢٠" }, ], }, { id: "c3", name: "خالد العتيبي", avatar: "خع", avatarColor: "bg-purple-600", channel: "sms", lastMessage: "موعدنا يوم الأحد الساعة ١١ صباحاً", time: "١٢:٠٠", unread: 1, messages: [ { id: "m11", text: "خالد، تذكير بموعد العرض التقديمي", sent: true, time: "١١:٣٠", read: true }, { id: "m12", text: "موعدنا يوم الأحد الساعة ١١ صباحاً", sent: false, time: "١٢:٠٠" }, ], }, { id: "c4", name: "منيرة القحطاني", avatar: "مق", avatarColor: "bg-amber-600", channel: "whatsapp", lastMessage: "ودي أجرب النظام قبل ما نقرر", time: "٠٩:١٥", unread: 3, messages: [ { id: "m13", text: "مرحباً، محتاجين نظام CRM لشركة عقارية", sent: false, time: "٠٨:٤٥" }, { id: "m14", text: "أهلاً منيرة! Dealix يخدم أكثر من ٥٠ شركة عقارية في المملكة", sent: true, time: "٠٩:٠٠", read: true }, { id: "m15", text: "ودي أجرب النظام قبل ما نقرر", sent: false, time: "٠٩:١٥" }, ], }, ]; /* ───────────── typing indicator ───────────── */ function TypingIndicator() { return (
{[0, 1, 2].map((i) => ( ))}
); } /* ───────────── conversation list item ───────────── */ function ConversationItem({ convo, isActive, onClick, }: { convo: Conversation; isActive: boolean; onClick: () => void; }) { const ch = channelConfig[convo.channel]; const Icon = ch.icon; return ( {/* avatar */}
{convo.avatar}
{/* text */}
{convo.time}

{convo.name}

{convo.lastMessage}

{/* unread badge */} {convo.unread > 0 && ( {convo.unread} )}
); } /* ───────────── chat panel ───────────── */ function ChatPanel({ convo, onBack, }: { convo: Conversation; onBack: () => void; }) { const [messages, setMessages] = useState(convo.messages); const [input, setInput] = useState(""); const [showTyping, setShowTyping] = useState(false); const scrollRef = useRef(null); const ch = channelConfig[convo.channel]; useEffect(() => { setMessages(convo.messages); }, [convo.id, convo.messages]); useEffect(() => { scrollRef.current?.scrollTo({ top: scrollRef.current.scrollHeight, behavior: "smooth" }); }, [messages, showTyping]); const handleSend = () => { if (!input.trim()) return; const newMsg: Message = { id: `m-${Date.now()}`, text: input, sent: true, time: new Date().toLocaleTimeString("ar-SA", { hour: "2-digit", minute: "2-digit" }), read: false, }; setMessages((prev) => [...prev, newMsg]); setInput(""); setShowTyping(true); setTimeout(() => { setShowTyping(false); setMessages((prev) => [ ...prev, { id: `m-${Date.now()}-r`, text: "شكراً لتواصلك! سأرد عليك في أقرب وقت", sent: false, time: new Date().toLocaleTimeString("ar-SA", { hour: "2-digit", minute: "2-digit" }), }, ]); }, 2000); }; return (
{/* chat header */}

{convo.name}

{ch.label}
{convo.avatar}
{/* back button mobile */}
{/* messages */}
{messages.map((msg) => (

{msg.text}

{msg.time} {msg.sent && (msg.read ? ( ) : ( ))}
))} {showTyping && ( )}
{/* AI suggestion chip */}
{/* input bar */}
setInput(e.target.value)} onKeyDown={(e) => e.key === "Enter" && handleSend()} placeholder="اكتب رسالتك..." className="flex-1 bg-white/5 border border-white/10 rounded-xl px-4 py-2.5 text-sm placeholder:text-white/30 focus:outline-none focus:border-teal-500/50 transition-colors" />
); } /* ───────────── main component ───────────── */ export function UnifiedInbox() { const [activeId, setActiveId] = useState(null); const [filter, setFilter] = useState("all"); const [search, setSearch] = useState(""); const filtered = sampleConversations.filter((c) => { if (filter !== "all" && c.channel !== filter) return false; if (search && !c.name.includes(search) && !c.lastMessage.includes(search)) return false; return true; }); const activeConvo = sampleConversations.find((c) => c.id === activeId) ?? null; return ( {/* ─── right panel: conversation list ─── */}
{/* search */}
setSearch(e.target.value)} placeholder="بحث..." className="w-full bg-white/5 border border-white/10 rounded-xl pr-10 pl-4 py-2 text-sm placeholder:text-white/30 focus:outline-none focus:border-teal-500/40 transition-colors" />
{/* filter tabs */}
{filterTabs.map((tab) => ( ))}
{/* list */}
{filtered.map((convo, i) => ( setActiveId(convo.id)} /> ))} {filtered.length === 0 && (
لا توجد محادثات
)}
{/* ─── left panel: chat thread ─── */}
{activeConvo ? ( setActiveId(null)} /> ) : (

اختر محادثة للبدء

)}
); }