'use client' import { useState } from 'react' import { useRouter } from 'next/navigation' import PageLayout from '../../../components/PageLayout' import useAuthStore from '../../../store/authStore' import { useUserStatus } from '../../../hooks/useUserStatus' interface CompanyProfileData { companyName: string vatNumber: string street: string postalCode: string city: string country: string accountHolder: string iban: string bic: string secondPhone: string emergencyName: string emergencyPhone: string } const init: CompanyProfileData = { companyName: '', vatNumber: '', street: '', postalCode: '', city: '', country: '', accountHolder: '', iban: '', bic: '', secondPhone: '', emergencyName: '', emergencyPhone: '' } export default function CompanyAdditionalInformationPage() { const router = useRouter() const { accessToken } = useAuthStore() const { refreshStatus } = useUserStatus() const [form, setForm] = useState(init) const [loading, setLoading] = useState(false) const [success, setSuccess] = useState(false) const [error, setError] = useState('') const handleChange = (e: React.ChangeEvent) => { const { name, value } = e.target setForm(p => ({ ...p, [name]: value })) setError('') } const validate = () => { const required: (keyof CompanyProfileData)[] = [ 'companyName','vatNumber','street','postalCode','city','country','accountHolder','iban' ] for (const k of required) { if (!form[k].trim()) { setError('Bitte alle Pflichtfelder ausfüllen.') return false } } if (!/^([A-Z]{2}\d{2}[A-Z0-9]{10,30})$/i.test(form.iban.replace(/\s+/g,''))) { setError('Ungültige IBAN.') return false } setError('') return true } const submit = async (e: React.FormEvent) => { e.preventDefault() if (loading || success) return if (!validate()) return if (!accessToken) { setError('Not authenticated. Please log in again.') return } setLoading(true) try { // Prepare data for backend with correct field names const profileData = { address: form.street, // Backend expects 'address', not nested object zip_code: form.postalCode, // Backend expects 'zip_code' city: form.city, country: form.country, registrationNumber: form.vatNumber, // Map VAT number to registration number businessType: 'company', // Default business type branch: null, // Not collected in form, set to null numberOfEmployees: null, // Not collected in form, set to null accountHolderName: form.accountHolder, // Backend expects 'accountHolderName' iban: form.iban.replace(/\s+/g, '') // Remove spaces from IBAN } const response = await fetch(`${process.env.NEXT_PUBLIC_API_BASE_URL}/api/profile/company/complete`, { method: 'POST', headers: { 'Authorization': `Bearer ${accessToken}`, 'Content-Type': 'application/json' }, body: JSON.stringify(profileData) }) if (!response.ok) { const errorData = await response.json().catch(() => ({ message: 'Save failed' })) throw new Error(errorData.message || 'Save failed') } setSuccess(true) // Refresh user status to update profile completion state await refreshStatus() // Redirect to next step after short delay setTimeout(() => { router.push('/quickaction-dashboard/register-sign-contract/company') }, 1500) } catch (error: any) { console.error('Company profile save error:', error) setError(error.message || 'Speichern fehlgeschlagen.') } finally { setLoading(false) } } return (
{/* Background */}

Complete Company Profile

{/* Company Details */}

Company Details


{/* Bank Details */}

Bank Details


{/* Additional Information */}

Additional Information

{error && (
{error}
)} {success && (
Daten gespeichert.
)}
) }