'use client';
import { useState } from 'react';
import { OrderItem } from '@/lib/types';
import { cn, formatDate, formatCurrency, parseCoordinates } from '@/lib/utils';
import {
Check,
AlertTriangle,
Navigation,
ChevronDown,
ChevronUp,
Package,
Wrench,
Hammer,
ShoppingCart,
AlertCircle,
Clock,
MapPin,
} from 'lucide-react';
interface CollectionItemProps {
item: OrderItem;
supplierColor?: { border: string; dot: string; light: string; text: string; ring: string };
compact?: boolean;
onCollect: (item: OrderItem) => void;
onProblem: (item: OrderItem) => void;
onNavigate: (lat: number, lng: number, name: string) => void;
}
function getItemType(item: OrderItem): {
type: string;
icon: React.ReactNode;
color: string;
bgColor: string;
label: string;
} {
if (item.item_status === 'problem' || item.problem_flag) {
return {
type: 'problem',
icon: ,
color: 'text-red-600',
bgColor: 'bg-red-50',
label: 'Problem',
};
}
const orderNumber = item.expand?.order?.order_number || '';
if (orderNumber.toLowerCase().includes('breakdown')) {
return {
type: 'breakdown',
icon: ,
color: 'text-orange-600',
bgColor: 'bg-orange-50',
label: 'Breakdown',
};
}
if (orderNumber.toLowerCase().includes('repair')) {
return {
type: 'repair',
icon: ,
color: 'text-amber-600',
bgColor: 'bg-amber-50',
label: 'Repair',
};
}
if (item.is_stock_item) {
return {
type: 'stock',
icon: ,
color: 'text-violet-600',
bgColor: 'bg-violet-50',
label: 'Stock',
};
}
return {
type: 'normal',
icon: ,
color: 'text-orange-600',
bgColor: 'bg-orange-50',
label: 'Order',
};
}
export default function CollectionItemCard({
item,
supplierColor,
compact,
onCollect,
onProblem,
onNavigate,
}: CollectionItemProps) {
const [expanded, setExpanded] = useState(false);
const supplier = item.expand?.supplier;
const itemType = getItemType(item);
const coords = parseCoordinates(supplier?.coordinates);
const hasCoords = coords !== null;
const description = item.description || 'Unknown item';
const expectedQty = item.order_qty || item.quantity || 0;
const colorAccent = supplierColor?.border || 'border-l-orange-400';
return (
{/* Header */}
{/* Expanded Details */}
{expanded && (
{/* Notes */}
{item.notes && (
)}
{item.problem_notes && (
)}
{/* Details grid */}
{item.expand?.order?.order_number && (
Order
{item.expand.order.order_number}
)}
{item.expand?.purchase_order?.po_number && (
PO
{item.expand.purchase_order.po_number}
)}
{supplier?.supplieraddress && (
Address
{supplier.supplieraddress}
)}
{/* Action Buttons */}
{hasCoords && coords && supplier ? (
) : (
No GPS
)}
)}
);
}