"use client"; import { useState, useTransition } from "react"; import { MessageMultiple01Icon, QuestionIcon } from "@hugeicons/core-free-icons"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card"; import { Textarea } from "@/components/ui/textarea"; import { Badge } from "@/components/ui/badge"; import { formatDateTime } from "@/lib/format"; import { Icon } from "@/components/shared/icon"; type ChatSource = { file_id?: string; file_name?: string; page_number?: number | null; snippet?: string; }; type ChatTurn = { id: string; question: string; answer: string; sources?: unknown; createdAt: Date | string; }; type CaseChatPanelProps = { customerId: string; caseId: string; initialTurns: ChatTurn[]; }; export function CaseChatPanel({ customerId, caseId, initialTurns, }: CaseChatPanelProps) { const [question, setQuestion] = useState(""); const [turns, setTurns] = useState(initialTurns); const [error, setError] = useState(null); const [isPending, startTransition] = useTransition(); function handleSubmit(event: React.FormEvent) { event.preventDefault(); setError(null); if (!question.trim()) { setError("اكتب سؤالك الأول."); return; } startTransition(async () => { const response = await fetch( `/api/customers/${customerId}/cases/${caseId}/chat`, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ question, }), }, ); const payload = (await response.json().catch(() => null)) as | { message?: string; turn?: ChatTurn } | null; if (!response.ok || !payload?.turn) { setError(payload?.message || "تعذر الحصول على إجابة دلوقتي."); return; } setTurns((current) => [...current, payload.turn as ChatTurn]); setQuestion(""); }); } return (
محادثة القضية اسأل عن ملفات القضية PDF، وسيتم الرد اعتمادًا على المحتوى المفهرس فقط.