'use client'; import { useState } from 'react'; import { useRouter } from 'next/navigation'; import { FiCalendar, FiMapPin, FiUser, FiMail, FiPhone, FiEdit, FiSave, FiX, FiCamera, FiTruck, FiFileText } from 'react-icons/fi'; import Link from 'next/link'; import { formatDate, formatDateTime } from '@/lib/date-utils'; import ContractSection from './ContractSection'; interface BookingDetailProps { booking: any; emails: any[]; user: any; } export default function BookingDetail({ booking, emails, user }: BookingDetailProps) { const router = useRouter(); const [editing, setEditing] = useState(false); const [formData, setFormData] = useState(booking); const [saving, setSaving] = useState(false); const handleSave = async () => { setSaving(true); try { const res = await fetch(`/api/bookings/${booking.id}`, { method: 'PUT', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(formData), }); if (res.ok) { alert('Gespeichert!'); setEditing(false); window.location.reload(); } else { alert('Fehler beim Speichern'); } } catch (error) { alert('Fehler beim Speichern'); } finally { setSaving(false); } }; const handleStatusChange = async (newStatus: string) => { if (!confirm(`Status zu "${newStatus}" ändern?`)) return; try { const res = await fetch(`/api/bookings/${booking.id}/status`, { method: 'PUT', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ status: newStatus }), }); if (res.ok) { alert('Status geändert!'); window.location.reload(); } else { alert('Fehler beim Ändern'); } } catch (error) { alert('Fehler beim Ändern'); } }; const getStatusColor = (status: string) => { switch (status) { case 'RESERVED': return 'bg-yellow-500/20 text-yellow-400 border-yellow-500/50'; case 'CONFIRMED': return 'bg-green-500/20 text-green-400 border-green-500/50'; case 'COMPLETED': return 'bg-blue-500/20 text-blue-400 border-blue-500/50'; case 'CANCELLED': return 'bg-red-500/20 text-red-400 border-red-500/50'; default: return 'bg-gray-500/20 text-gray-400 border-gray-500/50'; } }; const getStatusLabel = (status: string) => { const labels: any = { RESERVED: 'Reserviert', CONFIRMED: 'Bestätigt', COMPLETED: 'Abgeschlossen', CANCELLED: 'Storniert', }; return labels[status] || status; }; return (
{booking.customerName}
)}{booking.customerEmail}
)}{booking.customerPhone}
)}{booking.invoiceType === 'BUSINESS' ? 'Geschäftlich' : 'Privat'}
{booking.companyName}
{formatDate(booking.eventDate)}
{booking.location.name}
{booking.eventAddress}
{booking.eventZip} {booking.eventCity}
{booking.eventLocation}
{formatDateTime(booking.setupTimeStart)}
{formatDateTime(booking.setupTimeLatest)}
{booking.notes}
Von: {email.from}
{email.parsed && ( Automatisch verarbeitet )}Modell
{booking.photobox.model}
Seriennummer
{booking.photobox.serialNumber}
Noch nicht zugewiesen
)}{booking.calculatedPrice || 0}€
{booking.distance && (+ {booking.distance} km Anfahrt
)}am {formatDate(booking.contractSignedAt)}
)}Fahrer: {tour.driver.name}
) : (Noch kein Fahrer zugewiesen
)}