import { useState } from "react"; import { ChevronDown, ChevronUp, Eye } from "lucide-react"; import type { ImageResult } from "@/types"; import { getImageUrl } from "@/services/api"; interface ImageResultCardProps { result: ImageResult; index: number; } export function ImageResultCard({ result, index }: ImageResultCardProps) { const [expanded, setExpanded] = useState(false); const hasError = !!result.error; return (
setExpanded((e) => !e)} > {/* Index badge */}
{index + 1}
{/* Preview thumbnail */} {result.previewUrl && (
{result.filename}
)} {/* Name + status */}

{result.filename}

{hasError ? (

{typeof result.error === "string" ? result.error : JSON.stringify(result.error)}

) : (
{result.angles.map((angle, i) => ( {angle} ))} {result.review && ( Needs review )}
)}
{/* Expand */}
{expanded ? : }
{/* Expanded view */} {expanded && !hasError && (
{/* Local preview always shown */} {result.previewUrl && (

Uploaded Image

{result.filename}
)} {/* Backend detection overlays (only when available) */} {result.fileDetails && (

Detection Outputs

{[ { label: "Original", path: result.fileDetails.main_img_name }, { label: "Car Detection", path: result.fileDetails.car_detection }, { label: "Part Detection", path: result.fileDetails.part_detection }, ].map(({ label, path }) => (
{label} { e.currentTarget.style.display = "none"; }} />
{label}

{label}

))}
)}
)}
); }