'use client';
import { useState } from 'react';
import { Collection } from '@/lib/types';
import { cn, formatDate, formatCurrency } from '@/lib/utils';
import {
Check,
AlertTriangle,
Navigation,
ChevronDown,
ChevronUp,
Package,
Wrench,
Hammer,
ShoppingCart,
AlertCircle,
} from 'lucide-react';
interface CollectionItemProps {
collection: Collection;
onCollect: (collection: Collection) => void;
onProblem: (collection: Collection) => void;
onNavigate: (lat: number, lng: number, name: string) => void;
}
function getItemType(collection: Collection): {
type: string;
icon: React.ReactNode;
color: string;
label: string;
} {
if (collection.status === 'problem') {
return {
type: 'problem',
icon: ,
color: 'text-red-500',
label: 'Problem',
};
}
const orderNumber = collection.expand?.order_item?.expand?.order?.order_number || '';
const desc = collection.description || collection.expand?.order_item?.description || '';
if (orderNumber.toLowerCase().includes('breakdown')) {
return {
type: 'breakdown',
icon: ,
color: 'text-orange-600',
label: 'Breakdown',
};
}
if (orderNumber.toLowerCase().includes('repair')) {
return {
type: 'repair',
icon: ,
color: 'text-amber-500',
label: 'Repair',
};
}
if (collection.is_manual) {
return {
type: 'manual',
icon: ,
color: 'text-purple-500',
label: 'Manual',
};
}
return {
type: 'normal',
icon: ,
color: 'text-orange-500',
label: 'Order',
};
}
export default function CollectionItemCard({
collection,
onCollect,
onProblem,
onNavigate,
}: CollectionItemProps) {
const [expanded, setExpanded] = useState(false);
const [showActions, setShowActions] = useState(false);
const supplier = collection.expand?.supplier;
const orderItem = collection.expand?.order_item;
const itemType = getItemType(collection);
const hasCoords = supplier?.latitude && supplier?.longitude;
const description = collection.is_manual
? collection.description
: orderItem?.description || 'Unknown item';
const quantity = collection.quantity || orderItem?.quantity || 0;
const unit = collection.unit || orderItem?.unit || 'units';
const orderNumber = orderItem?.expand?.order?.order_number || '';
const poNumber = orderItem?.expand?.purchase_order?.po_number || '';
return (
{/* Header */}
setExpanded(!expanded)}
>
{itemType.icon}
{description}
{itemType.label}
{supplier?.suppliername || 'Unknown Supplier'}
Expected: {quantity} {unit}
{orderNumber &&
Order: {orderNumber}
}
{poNumber &&
PO: {poNumber}
}
{collection.planned_date && (
Planned: {formatDate(collection.planned_date)}
)}
{orderItem?.selling_price && (
{formatCurrency(orderItem.selling_price * quantity)}
)}
{expanded ? (
) : (
)}
{/* Expanded Details */}
{expanded && (
{collection.notes && (
)}
{supplier?.address && (
Address: {supplier.address}
)}
{/* Action Buttons */}
{hasCoords && supplier && (
)}
)}
);
}