'use client' import React from 'react' import { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter } from '@/components/ui/card' import { Separator } from '@/components/ui/separator' import { Button } from '@/components/ui/button' import { ShieldCheck, Building2, Calendar, Loader2 } from 'lucide-react' import * as Icons from 'lucide-react' import { Category, Product, EndCustomer, Profile } from '@/lib/types' interface StepSummaryProps { finalItemsToShow: any[] visibleCategories: Category[] products: Product[] oneTimeTotal: number monthlyTotal: number oneTimeNet: number oneTimeTax: number oneTimeGross: number monthlyNet: number monthlyTax: number monthlyGross: number updatePriceModifier: { label?: string } selectedEndCustomer: EndCustomer | null customerData: Partial lastLicenseDate: string handleSubmit: () => Promise isSubmitting: boolean initialOrder: any prevStep: () => void } function CategoryIcon({ icon, className }: { icon?: string | null; className?: string }) { const LucideIcon = icon ? (Icons as any)[icon] : null if (!LucideIcon) return return } export function StepSummary({ finalItemsToShow, visibleCategories, products, oneTimeTotal, monthlyTotal, oneTimeNet, oneTimeTax, oneTimeGross, monthlyNet, monthlyTax, monthlyGross, updatePriceModifier, selectedEndCustomer, customerData, lastLicenseDate, handleSubmit, isSubmitting, initialOrder, prevStep, }: StepSummaryProps) { return (
Anfrage prüfen Fast fertig! Bitte überprüfen Sie Ihre Auswahl.
{finalItemsToShow.map((item, itemIdx) => (
Kasse: {item.deviceName} {item.billingInterval === 'one_time' ? 'Kauf' : 'Abo'}
{visibleCategories.map(cat => { const sel = item.selections[cat.id] const selectedProds: Product[] = [] if (cat.allow_multiselect && sel?.productIds) { sel.productIds.forEach((pId: string) => { const p = products.find(prod => prod.id === pId) if (p) selectedProds.push(p) }) } else if (sel?.productId) { const p = products.find(prod => prod.id === sel.productId) if (p) selectedProds.push(p) } if (selectedProds.length === 0) return null const sortedProds = [...selectedProds].sort((a, b) => a.base_price - b.base_price) const freeLimit = cat.allow_multiselect ? cat.free_items_limit : 0 return (
{cat.name}
{sortedProds.map((prod, idx) => { const isFree = idx < freeLimit const actualPrice = isFree ? 0 : prod.base_price const catTotal = Number(actualPrice) + (sel?.moduleIds?.reduce((acc: number, mId: string) => { const mod = prod.modules?.find(m => m.id === mId) const qty = item.moduleQuantities[mId] || 1 return acc + (Number(mod?.price ?? 0) * qty) }, 0) || 0) return (
{prod.name} {isFree && (Frei)} {new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(catTotal)}
{sel?.moduleIds && sel.moduleIds.length > 0 && (

Module: {sel.moduleIds .map((id: string) => { const mod = prod.modules?.find(m => m.id === id) const qty = item.moduleQuantities[id] || 1 return mod ? `${mod.name}${mod.has_quantity ? ` (x${qty})` : ''}` : '' }) .filter(Boolean) .join(', ')}

)}
) })}
) })}
))}
{selectedEndCustomer ? ( <>

{selectedEndCustomer.company_name}

{[selectedEndCustomer.first_name, selectedEndCustomer.last_name].filter(Boolean).join(' ')}

{[selectedEndCustomer.street, selectedEndCustomer.zip, selectedEndCustomer.city].filter(Boolean).join(', ')}

Endkunde Ihres Partners

{lastLicenseDate && (

Letzte Lizenz vom: {new Date(lastLicenseDate).toLocaleDateString('de-DE')}

)} ) : ( <>

{customerData.company_name}

{customerData.first_name} {customerData.last_name}

{customerData.address}, {customerData.zip_code} {customerData.city}

)}
{oneTimeTotal > 0 && monthlyTotal > 0 ? (

Einmaliger Betrag:

Netto: {new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(oneTimeNet)}
zzgl. 19% MwSt.: {new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(oneTimeTax)}
Brutto: {new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(oneTimeGross)}
{updatePriceModifier.label && (
{updatePriceModifier.label}
)}

Monatlicher Betrag:

Netto: {new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(monthlyNet)} / mtl.
zzgl. 19% MwSt.: {new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(monthlyTax)} / mtl.
Brutto: {new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(monthlyGross)} / mtl.
) : oneTimeTotal > 0 ? (
Netto-Gesamtbetrag: {new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(oneTimeNet)}
zzgl. 19% MwSt.: {new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(oneTimeTax)}
{updatePriceModifier.label && (
{updatePriceModifier.label}
)}
Gesamtbetrag (brutto): {new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(oneTimeGross)}
) : (
Netto-Gesamtbetrag: {new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(monthlyNet)} / mtl.
zzgl. 19% MwSt.: {new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(monthlyTax)} / mtl.
Gesamtbetrag (brutto): {new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(monthlyGross)} / mtl.
)}

Mit dem Klick auf „Kostenpflichtig bestellen" akzeptieren Sie unsere AGB und die{' '} Datenschutzerklärung .

) }