import React from 'react'; import { Scissors, Edit, Trash2, Calendar, Camera, Square, Clock, AlertTriangle } from './Icons'; import { Zone } from '../types/zone'; interface ZoneCardProps { zone: Zone; onMarkAsMowed: (zone: Zone) => void; onEdit: (zone: Zone) => void; onDelete: (id: number) => void; } const ZoneCard: React.FC = ({ zone, onMarkAsMowed, onEdit, onDelete, }) => { const getStatusColor = (status: string) => { switch (status) { case 'overdue': return 'border-red-500 bg-red-50'; case 'due': return 'border-orange-500 bg-orange-50'; case 'new': return 'border-blue-500 bg-blue-50'; default: return 'border-green-500 bg-green-50'; } }; const getStatusText = (zone: Zone) => { if (zone.isNew) { return 'Еще не косилась'; } else if (zone.isOverdue) { return `${Math.abs(zone.daysUntilNext!)} дней посроченно`; } else if (zone.isDueToday) { return 'Срок - сегодня'; } else { return `${zone.daysUntilNext} дней осталось`; } }; const getStatusTextColor = (status: string) => { switch (status) { case 'overdue': return 'text-red-700'; case 'due': return 'text-orange-700'; case 'new': return 'text-blue-700'; default: return 'text-green-700'; } }; const getStatusIcon = (status: string) => { switch (status) { case 'overdue': return ; case 'due': return ; case 'new': return ; default: return ; } }; const formatDate = (dateString: string) => { if (!dateString) return 'Никогда'; return new Date(dateString).toLocaleDateString('ru-RU', { month: 'long', day: 'numeric', year: 'numeric', }); }; const formatArea = (area: number) => { if (area === 0) return 'Not specified'; return `${area.toLocaleString()} м2`; }; const getScheduleText = (zone: Zone) => { if (zone.scheduleType === 'specific') { if (zone.nextMowDate) { return `Next: ${formatDate(zone.nextMowDate)}`; } return 'Specific date scheduling'; } else { return zone.intervalDays ? `Каждые ${zone.intervalDays} дней` : 'Не запланированно'; } }; return (
{/* Zone Image */} {zone.imagePath ? (
{zone.name}
) : (

Нет изображения

)}
{/* Zone Name and Status */}

{zone.name}

{getStatusIcon(zone.status)} {getStatusText(zone)}
{/* Zone Details */}
Была скошена: {zone.lastMowedDate ? formatDate(zone.lastMowedDate) : '—'}
{getScheduleText(zone)}
Площадь: {formatArea(zone.area)}
{/* Action Buttons */}
); }; export default ZoneCard;