import React, { useMemo, useState } from 'react'; import { User, Building2, Mail, ChevronDown, ChevronUp, Copy, CheckCircle2 } from 'lucide-react'; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { motion } from 'framer-motion'; export default function SequenceCard({ contact, index }) { const [isExpanded, setIsExpanded] = useState(index < 3); const [copiedEmailNum, setCopiedEmailNum] = useState(null); const [expandedEmailNum, setExpandedEmailNum] = useState(null); const emails = contact.emails || []; const linkedin = contact.linkedin || []; const firstEmail = emails[0] || linkedin[0] || { firstName: contact.firstName, lastName: contact.lastName, company: contact.company, email: contact.email, product: contact.product, }; const mergedTimeline = useMemo(() => { const parts = [ ...(emails || []).map((m, i) => ({ kind: 'email', stepOrder: m.stepOrder, data: m, key: `e-${m.stepOrder ?? 'x'}-${m.emailNumber ?? i}`, })), ...(linkedin || []).map((m, i) => ({ kind: 'linkedin', stepOrder: m.stepOrder, data: m, key: `l-${m.stepOrder ?? 'x'}-${m.emailNumber ?? i}`, })), ]; const hasOrder = parts.some((p) => p.stepOrder != null); if (!hasOrder) return null; return [...parts].sort((a, b) => (a.stepOrder ?? 1e9) - (b.stepOrder ?? 1e9)); }, [emails, linkedin]); const handleCopy = (emailContent, emailNum) => { navigator.clipboard.writeText(emailContent); setCopiedEmailNum(emailNum); setTimeout(() => setCopiedEmailNum(null), 2000); }; return (
setIsExpanded(!isExpanded)} >
{firstEmail.firstName?.[0]}{firstEmail.lastName?.[0]}

{firstEmail.firstName} {firstEmail.lastName}

{firstEmail.company} {firstEmail.email} {(emails.length > 0 || linkedin.length > 0) && ( {emails.length > 0 ? `${emails.length} email${emails.length === 1 ? '' : 's'}` : null} {emails.length > 0 && linkedin.length > 0 ? ' · ' : null} {linkedin.length > 0 ? `${linkedin.length} LinkedIn` : null} )}
{firstEmail.product} {isExpanded ? ( ) : ( )}
{isExpanded && (
{mergedTimeline ? ( mergedTimeline.map((item, idx) => { const copyId = item.kind === 'email' ? item.data.emailNumber || idx + 1 : `li-${item.data.emailNumber || idx + 1}`; const isLi = item.kind === 'linkedin'; return (
{isLi ? 'LinkedIn' : 'Gmail'}
{isLi ? `Message ${item.data.emailNumber || idx + 1}` : `Email ${item.data.emailNumber || idx + 1}`}
{!isLi && (
Subject

{item.data.subject}

)}
{item.data.emailContent}
); }) ) : ( <> {emails.map((email, emailIdx) => (
Email {email.emailNumber || emailIdx + 1}
{emails.length > 1 && ( {email.emailNumber || emailIdx + 1} of {emails.length} )}
Subject

{email.subject}

{email.emailContent}
))} {linkedin.map((msg, liIdx) => (
LinkedIn — Message {msg.emailNumber || liIdx + 1}
{msg.emailContent}
))} )}
)}
); }