import { useState } from 'react' import { FaLock, FaLockOpen, FaPlay, FaStop, FaTruck, FaSackDollar, FaUserGear, FaPlus, FaClockRotateLeft } from 'react-icons/fa6' import { formatDistanceToNow, format } from 'date-fns' import { de } from 'date-fns/locale' import StatusDropdown from './StatusDropdown' import PriorityDropdown from './PriorityDropdown' import EditorDropdown from './EditorDropdown' import ResponseDropdown from './ResponseDropdown' import CreateWorksheetModal from './CreateWorksheetModal' import StatusHistoryModal from './StatusHistoryModal' import WorksheetList from './WorksheetList' import WorksheetStats from './WorksheetStats' import { useWorksheets } from '../hooks/useWorksheets' const PRIORITY_CLASSES = { 0: 'priority-none', 1: 'priority-low', 2: 'priority-medium', 3: 'priority-high', 4: 'priority-critical' } const PRIORITY_LABELS = { 0: 'NONE', 1: 'LOW', 2: 'MEDIUM', 3: 'HIGH', 4: 'CRITICAL' } const STATUS_CLASSES = { 'Open': 'status-open', 'Occupied': 'status-occupied', 'Assigned': 'status-assigned', 'Awaiting': 'status-awaiting', 'Closed': 'status-closed' } const APPROVAL_ICONS = { 'pending': FaUserGear, 'approved': FaSackDollar, 'quote': FaSackDollar, 'shipping': FaTruck } export default function TicketRow({ ticket, onUpdate, onExpand }) { const [expanded, setExpanded] = useState(false) const [locked, setLocked] = useState(true) const [showCreateWorksheet, setShowCreateWorksheet] = useState(false) const [showHistoryModal, setShowHistoryModal] = useState(false) // Worksheets für dieses Ticket laden (nur wenn expanded) const { worksheets, loading: worksheetsLoading, createWorksheet, getTotalTime } = useWorksheets(expanded ? ticket.woid : null) const createdAt = new Date(ticket.$createdAt || ticket.createdAt) const elapsed = formatDistanceToNow(createdAt, { locale: de }) const handleStatusChange = (newStatus) => { onUpdate(ticket.$id, { status: newStatus }) } const handlePriorityChange = (newPriority) => { onUpdate(ticket.$id, { priority: newPriority }) } const handleEditorChange = (newEditor) => { onUpdate(ticket.$id, { assignedTo: newEditor }) } const handleResponseChange = (newResponse) => { onUpdate(ticket.$id, { responseLevel: newResponse }) } const toggleLock = () => { if (locked) { setExpanded(true) onExpand?.(ticket.$id) } else { setExpanded(false) } setLocked(!locked) } const handleCreateWorksheet = async (worksheetData, currentUser) => { const result = await createWorksheet(worksheetData, currentUser) // Wenn Status geändert wurde, aktualisiere Work Order if (result.success && worksheetData.newStatus !== ticket.status) { await onUpdate(ticket.$id, { status: worksheetData.newStatus, responseLevel: worksheetData.newResponseLevel || ticket.responseLevel }) } return result } const ApprovalIcon = APPROVAL_ICONS[ticket.approvalStatus] || FaUserGear return ( <>
WOID: {ticket.woid || ticket.$id?.slice(-5)}
{elapsed}
{format(createdAt, 'dd.MM.yyyy')} {ticket.type}
{ticket.serviceType || 'Remote'}
{ticket.startDate || format(createdAt, 'dd.MM.yyyy')}
{ticket.deadline || '-'} {ticket.systemType || 'n/a'} {ticket.customerName || 'Unknown'}
{ticket.customerLocation || ''} {ticket.requestedBy || '-'}
{ticket.requestedFor && <>Requested for: {ticket.requestedFor}
} {ticket.topic} {locked ? : } {expanded && ( <>
{/* Bento Box Layout: 2 Spalten */}
{/* Linke Spalte: Ticket-Beschreibung (50%) */}
📋 Ticket-Beschreibung

{ticket.details || 'Keine Details vorhanden.'}

{/* Rechte Spalte: Statistics, Buttons (50%) */}
{/* Button Row: Add Worksheet (100%) + History Icon Button */}
{/* Add Worksheet Button - 100% width minus icon button */} {/* History Icon Button - klein, grau, nur Icon */}
{/* Statistiken */} {worksheets.length > 0 && (
)}
{/* Gesamtarbeitszeit und Worksheet-Liste - 100% Breite unter dem Bento Box */}
)} setShowCreateWorksheet(false)} workorder={ticket} onCreate={handleCreateWorksheet} /> setShowHistoryModal(false)} worksheets={worksheets} ticket={ticket} /> ) }