"use client"; import { Negotiation } from "@/lib/types"; import { FEATURE_LABELS } from "@/lib/utils"; function Icon({ name, className = "" }: { name: string; className?: string }) { return {name}; } interface Props { negotiation: Negotiation; } export default function ResolutionCard({ negotiation }: Props) { const resolution = negotiation.resolution as Record | null; const status = negotiation.status; const analytics = negotiation.analytics; if (!resolution && status !== "resolved" && status !== "escalated") { return ( Resolution not yet available ); } const final = (resolution?.final_proposal ?? {}) as Record; const details = (final.details ?? {}) as Record; const roundsTaken = resolution?.rounds_taken as number | undefined; const summaryText = String(final.summary ?? resolution?.summary ?? ""); const forPartyA = final.for_party_a ? String(final.for_party_a) : null; const forPartyB = final.for_party_b ? String(final.for_party_b) : null; const upiLink = (details.upi_link ?? details.upilink) ? String(details.upi_link ?? details.upilink) : null; const isResolved = status === "resolved"; return ( {/* Hero card — matches Stitch resolution screen */} {/* Top gradient line */} {isResolved ? "Resolved" : "Escalated"} {FEATURE_LABELS[negotiation.feature_type]} {roundsTaken ? ` · ${roundsTaken} round${roundsTaken > 1 ? "s" : ""}` : ""} {summaryText && ( {summaryText} )} {/* Stats row */} {analytics && ( )} {/* Per-party outcomes */} {(forPartyA || forPartyB) && ( {forPartyA && ( Agent A {forPartyA} )} {forPartyB && ( Agent B {forPartyB} )} )} {/* Action buttons */} {upiLink && ( Pay via UPI Instant settlement )} Telegram Open channel Download PDF Full transcript Voice Summary AI generated audio ); } function MetricBox({ label, value, highlight = false, }: { label: string; value: string; highlight?: boolean; }) { return ( {label} {value} ); } interface Props { negotiation: Negotiation; }
{summaryText}
{forPartyA}
{forPartyB}