import React, { useState, useRef, useEffect } from 'react'; import { FileText, Send, Check, CreditCard, Building2, User, Mail, Phone, MapPin, Edit3, AlertCircle } from 'lucide-react'; const OnboardingSystem = () => { const [view, setView] = useState('admin'); // 'admin' or 'customer' const [adminData, setAdminData] = useState({ offerPdf: null, projectName: '', projectDescription: '', price: '', oneTimeLink: '' }); const [customerData, setCustomerData] = useState({ company: '', street: '', postalCode: '', city: '', contactPerson: '', email: '', phone: '', websiteSupport: '', hostingOption: '', signature: '', signatureDate: '', ipAddress: '', location: '' }); const [step, setStep] = useState(1); const [isDrawing, setIsDrawing] = useState(false); const canvasRef = useRef(null); const [paymentMethod, setPaymentMethod] = useState(''); // Generate unique link const generateLink = () => { const uniqueId = Math.random().toString(36).substring(2, 15); setAdminData({...adminData, oneTimeLink: `https://ihr-portal.de/onboarding/${uniqueId}`}); }; // Handle file upload const handleFileUpload = (e) => { const file = e.target.files[0]; if (file && file.type === 'application/pdf') { setAdminData({...adminData, offerPdf: file}); } }; // Start customer flow const startCustomerFlow = () => { if (!adminData.offerPdf || !adminData.projectName) { alert('Bitte füllen Sie alle erforderlichen Felder aus und laden Sie ein PDF hoch.'); return; } setView('customer'); setStep(1); // Simulate IP and location capture setCustomerData({ ...customerData, ipAddress: '192.168.1.100', location: 'Erlangen, DE' }); }; // Canvas drawing functions const startDrawing = (e) => { setIsDrawing(true); const canvas = canvasRef.current; const ctx = canvas.getContext('2d'); const rect = canvas.getBoundingClientRect(); const x = e.clientX - rect.left; const y = e.clientY - rect.top; ctx.beginPath(); ctx.moveTo(x, y); }; const draw = (e) => { if (!isDrawing) return; const canvas = canvasRef.current; const ctx = canvas.getContext('2d'); const rect = canvas.getBoundingClientRect(); const x = e.clientX - rect.left; const y = e.clientY - rect.top; ctx.lineTo(x, y); ctx.strokeStyle = '#6d0202'; ctx.lineWidth = 2; ctx.lineCap = 'round'; ctx.stroke(); }; const stopDrawing = () => { setIsDrawing(false); if (canvasRef.current) { const signatureData = canvasRef.current.toDataURL(); setCustomerData({ ...customerData, signature: signatureData, signatureDate: new Date().toLocaleString('de-DE') }); } }; const clearSignature = () => { const canvas = canvasRef.current; const ctx = canvas.getContext('2d'); ctx.clearRect(0, 0, canvas.width, canvas.height); setCustomerData({...customerData, signature: ''}); }; // Save contract to storage const finalizeContract = async () => { const contractData = { ...adminData, ...customerData, contractId: `CONTRACT-${Date.now()}`, timestamp: new Date().toISOString() }; try { await window.storage.set( `contract:${contractData.contractId}`, JSON.stringify(contractData) ); setStep(9); } catch (error) { console.error('Error saving contract:', error); alert('Fehler beim Speichern des Vertrags'); } }; // Admin Panel View if (view === 'admin') { return (

Admin Panel - Onboarding Link erstellen

Erstellen Sie einen Einmallink für Ihren Kunden

setAdminData({...adminData, projectName: e.target.value})} className="w-full px-4 py-3 bg-gray-700 border border-gray-600 rounded-lg text-white focus:ring-2 focus:ring-[#6d0202] focus:border-transparent" placeholder="z.B. Website Redesign für Firma XY" />