'use client'; import { useState } from 'react'; import { FiFileText, FiDownload, FiMail, FiUpload, FiCheck, FiClock } from 'react-icons/fi'; import { formatDateTime } from '@/lib/date-utils'; interface ContractSectionProps { booking: any; onRefresh: () => void; } export default function ContractSection({ booking, onRefresh }: ContractSectionProps) { const [generating, setGenerating] = useState(false); const [sending, setSending] = useState(false); const [uploading, setUploading] = useState(false); const handleGenerate = async () => { setGenerating(true); try { const res = await fetch(`/api/bookings/${booking.id}/contract`, { method: 'POST', }); if (res.ok) { alert('Vertrag erfolgreich erstellt!'); onRefresh(); } else { alert('Fehler beim Erstellen des Vertrags'); } } catch (error) { alert('Fehler beim Erstellen des Vertrags'); } finally { setGenerating(false); } }; const handleDownload = async () => { window.open(`/api/bookings/${booking.id}/contract`, '_blank'); }; const handleSend = async () => { setSending(true); try { const res = await fetch(`/api/bookings/${booking.id}/contract/send`, { method: 'POST', }); const data = await res.json(); if (res.ok) { alert(`Vertrag versendet! Link: ${data.signUrl}`); onRefresh(); } else { alert('Fehler beim Versenden des Vertrags'); } } catch (error) { alert('Fehler beim Versenden des Vertrags'); } finally { setSending(false); } }; const handleUpload = async (e: React.ChangeEvent) => { const file = e.target.files?.[0]; if (!file) return; setUploading(true); const formData = new FormData(); formData.append('file', file); try { const res = await fetch(`/api/bookings/${booking.id}/contract/upload`, { method: 'POST', body: formData, }); if (res.ok) { alert('Vertrag erfolgreich hochgeladen!'); onRefresh(); } else { alert('Fehler beim Hochladen'); } } catch (error) { alert('Fehler beim Hochladen'); } finally { setUploading(false); } }; const getStatus = () => { if (booking.contractSigned) { return { icon: , text: 'Unterschrieben', color: 'bg-green-50 border-green-200', }; } if (booking.contractSentAt) { return { icon: , text: 'Versendet', color: 'bg-yellow-50 border-yellow-200', }; } if (booking.contractGenerated) { return { icon: , text: 'Erstellt', color: 'bg-blue-50 border-blue-200', }; } return { icon: , text: 'Nicht erstellt', color: 'bg-gray-50 border-gray-200', }; }; const status = getStatus(); return (

📋 Vertrag

{status.icon} {status.text}
{booking.contractSigned && (

✓ Vertrag unterschrieben

Unterschrieben von: {booking.contractSignedBy}

Datum: {formatDateTime(booking.contractSignedAt)}

Art: {booking.contractSignedOnline ? 'Online-Signatur' : 'Analog hochgeladen'}

{booking.contractSignedIp && (

IP-Adresse: {booking.contractSignedIp}

)}
)} {booking.contractGenerated && !booking.contractSigned && (
{booking.contractGeneratedAt && (

Erstellt am: {formatDateTime(booking.contractGeneratedAt)}

)} {booking.contractSentAt && (

Versendet am: {formatDateTime(booking.contractSentAt)}

)}
)}
{!booking.contractGenerated ? ( ) : ( <> {!booking.contractSigned && ( <>
)} {booking.contractSigned && booking.contractPdfUrl && ( Signiertes PDF herunterladen )} )}
); }