'use client' import { useState, useRef } from 'react' import { useRouter } from 'next/navigation' import PageLayout from '../../../components/PageLayout' import { DocumentArrowUpIcon, XMarkIcon } from '@heroicons/react/24/outline' import useAuthStore from '../../../store/authStore' import { useUserStatus } from '../../../hooks/useUserStatus' const DOC_TYPES = ['Handelsregisterauszug', 'Gewerbeanmeldung', 'Steuerbescheid', 'Sonstiges'] export default function CompanyIdUploadPage() { const router = useRouter() const { accessToken } = useAuthStore() const { refreshStatus } = useUserStatus() const [docNumber, setDocNumber] = useState('') const [docType, setDocType] = useState('') const [issueDate, setIssueDate] = useState('') const [frontFile, setFrontFile] = useState(null) const [extraFile, setExtraFile] = useState(null) const [submitting, setSubmitting] = useState(false) const [error, setError] = useState('') const [success, setSuccess] = useState(false) const frontRef = useRef(null) const extraRef = useRef(null) const handleFile = (file: File, which: 'front' | 'extra') => { if (file.size > 10 * 1024 * 1024) { setError('Datei größer als 10 MB.') return } setError('') which === 'front' ? setFrontFile(file) : setExtraFile(file) } const dropHandlers = { onDragOver: (e: React.DragEvent) => e.preventDefault(), onDragEnter: (e: React.DragEvent) => e.preventDefault() } const submit = async (e: React.FormEvent) => { e.preventDefault() if (!docNumber.trim() || !docType || !issueDate || !frontFile) { setError('Bitte alle Pflichtfelder (mit *) ausfüllen.') return } if (!accessToken) { setError('Not authenticated. Please log in again.') return } setError('') setSubmitting(true) try { const formData = new FormData() formData.append('frontFile', frontFile) if (extraFile) { formData.append('backFile', extraFile) } formData.append('docType', docType) formData.append('docNumber', docNumber.trim()) formData.append('issueDate', issueDate) const response = await fetch(`${process.env.NEXT_PUBLIC_API_BASE_URL}/api/upload/company-id`, { method: 'POST', headers: { 'Authorization': `Bearer ${accessToken}` }, body: formData }) if (!response.ok) { const errorData = await response.json().catch(() => ({ message: 'Upload failed' })) throw new Error(errorData.message || 'Upload failed') } setSuccess(true) // Refresh user status to update verification state await refreshStatus() // Redirect to next step after short delay setTimeout(() => { router.push('/quickaction-dashboard/register-additional-information') }, 1500) } catch (error: any) { console.error('Company ID upload error:', error) setError(error.message || 'Upload fehlgeschlagen.') } finally { setSubmitting(false) } } return (
{/* Background (same as personal) */}

Company Document Verification

Upload a valid company registration or compliance document

setDocNumber(e.target.value)} className="w-full rounded-lg border border-gray-300 px-4 py-2.5 text-sm focus:ring-2 focus:ring-indigo-500 focus:border-transparent" placeholder="Enter reference number" required />
setIssueDate(e.target.value)} className="w-full rounded-lg border border-gray-300 px-4 py-2.5 text-sm focus:ring-2 focus:ring-indigo-500 focus:border-transparent" required />
{/* Upload Areas */}
{ e.preventDefault() const f = e.dataTransfer.files?.[0] if (f) handleFile(f, 'front') }} onClick={() => frontRef.current?.click()} className="group flex flex-col items-center justify-center rounded-lg border-2 border-dashed border-gray-300 bg-gray-50/60 px-4 py-10 text-center hover:border-indigo-400 hover:bg-indigo-50/40 cursor-pointer transition" > { const f = e.target.files?.[0] if (f) handleFile(f, 'front') }} /> {frontFile ? (

{frontFile.name}

) : ( <>

Upload primary document *

PNG, JPG, PDF up to 10MB

)}
{ e.preventDefault() const f = e.dataTransfer.files?.[0] if (f) handleFile(f, 'extra') }} onClick={() => extraRef.current?.click()} className="group flex flex-col items-center justify-center rounded-lg border-2 border-dashed border-gray-300 bg-gray-50/60 px-4 py-10 text-center hover:border-indigo-400 hover:bg-indigo-50/40 cursor-pointer transition" > { const f = e.target.files?.[0] if (f) handleFile(f, 'extra') }} /> {extraFile ? (

{extraFile.name}

) : ( <>

Optional supporting file

(Invoice, license, certificate…)

)}
{extraFile &&
Extra space for clarity
}
{/* Info */}

Guidelines:

  • Document must be valid & readable
  • Complete page (no cropping)
  • Good lighting (no glare)
  • PDF or clear image
  • Supplementary evidence speeds review
{error && (
{error}
)} {success && (
Dokumente erfolgreich hochgeladen.
)}
) }