"use client"; import React from "react"; import { Card } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Progress } from "@/components/ui/progress"; import { Package, TrendingUp, TrendingDown, Calendar, MapPin, User, } from "lucide-react"; import { SupplyCardProps } from "./types"; export function SupplyCard({ supply, isExpanded, onToggleExpansion, statusConfig, getSupplyDeliveries, }: SupplyCardProps) { const formatCurrency = (amount: number) => { return new Intl.NumberFormat("ru-RU", { style: "currency", currency: "RUB", minimumFractionDigits: 0, }).format(amount); }; const formatNumber = (num: number) => { return new Intl.NumberFormat("ru-RU").format(num); }; const StatusIcon = statusConfig.icon; const isLowStock = supply.currentStock <= supply.minStock && supply.currentStock > 0; const stockPercentage = supply.minStock > 0 ? (supply.currentStock / supply.minStock) * 100 : 100; return (
{/* Основная карточка расходника */} onToggleExpansion(supply.id)} > {/* Заголовок карточки */}

{supply.name}

{supply.description}

{statusConfig.label}
{/* Основная информация */}
{/* Остатки и прогресс-бар */}
Остаток {formatNumber(supply.currentStock)} /{" "} {formatNumber(supply.minStock)} {supply.unit}
50 ? "#10b981" : stockPercentage > 20 ? "#f59e0b" : "#ef4444" } 0%, ${ stockPercentage > 50 ? "#10b981" : stockPercentage > 20 ? "#f59e0b" : "#ef4444" } ${Math.min( stockPercentage, 100 )}%, rgba(255,255,255,0.1) ${Math.min(stockPercentage, 100)}%)`, }} />
{/* Метрики */}

Цена

{formatCurrency(supply.price)}

Стоимость

{formatCurrency( supply.totalCost || supply.price * supply.quantity )}

{/* Дополнительная информация */}
{supply.category} {getSupplyDeliveries(supply).length} поставок
{/* Поставщик и дата */}
{supply.supplier}
{new Date(supply.createdAt).toLocaleDateString("ru-RU")}
); }