'use client' import type { InvoiceInboxItem } from '@/types' import type { InvoiceExtractionResult } from '@/extensions/general/invoice-inbox/types' import { Card, CardContent } from '@/components/ui/card' import { Badge } from '@/components/ui/badge' import { getStatusLabel, getStatusVariant, getConfidenceLabel, formatExtractionSummary, } from '@/lib/extensions/invoice-inbox-utils' import { Mail, Upload, FileText } from 'lucide-react' interface InboxItemCardProps { item: InvoiceInboxItem onClick: () => void } function formatRelativeTime(dateStr: string): string { const now = new Date() const date = new Date(dateStr) const diffMs = now.getTime() - date.getTime() const diffMin = Math.floor(diffMs / 60000) if (diffMin < 1) return 'Just nu' if (diffMin < 60) return `${diffMin} min sedan` const diffH = Math.floor(diffMin / 60) if (diffH < 24) return `${diffH} tim sedan` const diffD = Math.floor(diffH / 24) if (diffD === 1) return 'Igår' return `${diffD} dagar sedan` } function formatAmount(amount: number, currency: string = 'SEK'): string { return new Intl.NumberFormat('sv-SE', { style: 'currency', currency, minimumFractionDigits: 0, maximumFractionDigits: 0, }).format(amount) } export default function InboxItemCard({ item, onClick }: InboxItemCardProps) { const summary = formatExtractionSummary(item.extracted_data as unknown as InvoiceExtractionResult | null) const confidence = getConfidenceLabel(item.confidence) const statusVariant = getStatusVariant(item.status) as 'default' | 'secondary' | 'destructive' | 'outline' | 'success' | 'warning' const confidenceVariant = confidence.variant as 'default' | 'secondary' | 'destructive' | 'outline' | 'success' | 'warning' const fileName = (item.document as { file_name?: string } | undefined)?.file_name ?? 'Okänd fil' const supplierName = (item.supplier as { name?: string } | undefined)?.name ?? summary.supplierName return (
{item.source === 'email' ? ( ) : ( )}
{fileName}
{supplierName ? ( {supplierName} ) : ( Okänd leverantör )}
{summary.total > 0 && ( {formatAmount(summary.total, summary.currency)} )}
{item.confidence != null && ( {confidence.label} )} {getStatusLabel(item.status)}
{formatRelativeTime(item.created_at)}
) }