import { Mail, UserRound, X } from "lucide-react"; import { useEffect, useMemo, useState } from "react"; import AgentSpark from "./AgentSpark"; import { buildHandoffSummary, EMAIL_TYPE_OPTIONS, HANDOFF_LABELS, INSTRUCTION_EXAMPLES, } from "../utils/handoffUtils"; function ToggleSwitch({ checked, onChange, label }) { return ( ); } export default function HumanHandoffDrawer({ open, rule, saving, onClose, onSave, onTest, }) { const [ownerEmail, setOwnerEmail] = useState(""); const [labels, setLabels] = useState([]); const [emailTypes, setEmailTypes] = useState([]); const [instructions, setInstructions] = useState(""); const [allowReplies, setAllowReplies] = useState(true); const [replyAs, setReplyAs] = useState("agent"); const [active, setActive] = useState(true); const [labelQuery, setLabelQuery] = useState(""); useEffect(() => { if (!open) return; setOwnerEmail(rule?.owner_email || ""); setLabels(rule?.labels || []); setEmailTypes(rule?.email_types || []); setInstructions(rule?.instructions || ""); setAllowReplies(rule?.allow_replies ?? true); setReplyAs(rule?.reply_as || "agent"); setActive(rule?.active ?? true); setLabelQuery(""); }, [open, rule]); const summary = useMemo( () => buildHandoffSummary({ ownerEmail, labels, emailTypes, instructions, }), [ownerEmail, labels, emailTypes, instructions], ); const filteredLabels = HANDOFF_LABELS.filter((label) => label.toLowerCase().includes(labelQuery.trim().toLowerCase()), ); function toggleLabel(label) { setLabels((current) => ( current.includes(label) ? current.filter((item) => item !== label) : [...current, label] )); } function toggleEmailType(typeId) { setEmailTypes((current) => ( current.includes(typeId) ? current.filter((item) => item !== typeId) : [...current, typeId] )); } function insertExample(example) { setInstructions((current) => { const trimmed = current.trim(); const addition = example.toLowerCase(); if (!trimmed) return `Hand off when there is a ${addition}.`; if (trimmed.toLowerCase().includes(addition)) return current; return `${trimmed.replace(/\.$/, "")}, or when there is a ${addition}.`; }); } if (!open) return null; return (