'use client'; import { useState } from 'react'; import { useRouter } from 'next/navigation'; import SignaturePad from './SignaturePad'; import { formatDate } from '@/lib/date-utils'; import { FiUpload, FiDownload } from 'react-icons/fi'; interface ContractSigningFormProps { booking: any; location: any; photobox: any; token: string; } export default function ContractSigningForm({ booking, location, photobox, token }: ContractSigningFormProps) { const router = useRouter(); const [signatureData, setSignatureData] = useState(null); const [acceptTerms, setAcceptTerms] = useState(false); const [submitting, setSubmitting] = useState(false); const [showSignature, setShowSignature] = useState(false); const [showUpload, setShowUpload] = useState(false); const [selectedFile, setSelectedFile] = useState(null); const [uploadProgress, setUploadProgress] = useState(false); const handleSubmit = async () => { if (!signatureData || !acceptTerms) return; setSubmitting(true); try { const res = await fetch('/api/contract/sign', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ token, signatureData, name: booking.customerName, email: booking.customerEmail, }), }); if (res.ok) { router.push(`/contract/success`); } else { alert('Fehler beim Unterschreiben des Vertrags'); setSubmitting(false); } } catch (error) { alert('Fehler beim Unterschreiben des Vertrags'); setSubmitting(false); } }; const handleFileSelect = (e: React.ChangeEvent) => { if (e.target.files && e.target.files[0]) { const file = e.target.files[0]; if (file.type === 'application/pdf') { setSelectedFile(file); } else { alert('Bitte wählen Sie eine PDF-Datei aus'); } } }; const handleUpload = async () => { if (!selectedFile || !acceptTerms) return; setUploadProgress(true); try { const formData = new FormData(); formData.append('file', selectedFile); formData.append('token', token); const res = await fetch('/api/contract/upload', { method: 'POST', body: formData, }); if (res.ok) { router.push(`/contract/success`); } else { alert('Fehler beim Hochladen des Vertrags'); setUploadProgress(false); } } catch (error) { alert('Fehler beim Hochladen des Vertrags'); setUploadProgress(false); } }; const handleDownloadContract = async () => { try { const decoded = Buffer.from(token, 'base64url').toString(); const bookingId = decoded.split('-')[0]; const res = await fetch(`/api/bookings/${bookingId}/contract`); if (res.ok) { const blob = await res.blob(); const url = window.URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = `Vertrag-${booking.bookingNumber}.pdf`; document.body.appendChild(a); a.click(); window.URL.revokeObjectURL(url); document.body.removeChild(a); } else { alert('Fehler beim Herunterladen des Vertrags'); } } catch (error) { alert('Fehler beim Herunterladen des Vertrags'); } }; return (
{/* Header */}

SaveTheMoment Atlas

Mietvertrag für Fotobox

{/* Contract Details */}

Vertragsdaten

Buchungsnummer

{booking.bookingNumber}

Event-Datum

{formatDate(booking.eventDate)}

Location

{booking.eventLocation || 'Nicht angegeben'}

Gesamtpreis

{booking.calculatedPrice?.toFixed(2) || '0.00'} €

Kundendaten

Name: {booking.customerName}

E-Mail: {booking.customerEmail}

Telefon: {booking.customerPhone}

Vertragsbedingungen

1. Der Vermieter verpflichtet sich, die Fotobox am Veranstaltungsort aufzubauen und nach der Veranstaltung wieder abzubauen.

2. Die Mietdauer beginnt mit dem Aufbau und endet mit dem Abbau der Fotobox.

3. Der Mieter haftet für Schäden, die während der Mietzeit an der Fotobox entstehen.

4. Der vereinbarte Mietpreis ist spätestens 7 Tage vor der Veranstaltung fällig.

5. Bei Stornierung weniger als 14 Tage vor der Veranstaltung wird eine Bearbeitungsgebühr von 50% erhoben.

{/* AGB Checkbox */}
{/* Signature Section */} {!showSignature && !showUpload ? (
oder

Laden Sie den Vertrag herunter, unterschreiben Sie ihn und laden Sie ihn dann wieder hoch

) : showSignature ? (

Unterschrift

{!signatureData ? ( setSignatureData(data)} onCancel={() => setShowSignature(false)} /> ) : (

✓ Unterschrift erfasst

Unterschrift
)}
) : (

Unterschriebenen Vertrag hochladen

{!selectedFile ? (

Wählen Sie die unterschriebene PDF-Datei aus

) : (

✓ Datei ausgewählt

{selectedFile.name}

Größe: {(selectedFile.size / 1024).toFixed(2)} KB

)}
)}
{/* Footer */}

SaveTheMoment Atlas • {location.name} • {location.contactEmail} • {location.contactPhone}

Dieser Vertrag wird elektronisch gespeichert. Sie erhalten eine Kopie per E-Mail.

); }