'use client' import { useState } from 'react' import { DSRRequest, DSRStatus, DSR_TYPE_INFO, DSR_STATUS_INFO, getDaysRemaining, isOverdue, } from '@/lib/sdk/dsr/types' import { updateSDKDSRStatus } from '@/lib/sdk/dsr/api' import { DSRWorkflowStepperCompact } from '@/components/sdk/dsr' export function DSRDetailPanel({ request, onClose, onUpdated }: { request: DSRRequest onClose: () => void onUpdated: () => void }) { const [isUpdatingStatus, setIsUpdatingStatus] = useState(false) const [actionError, setActionError] = useState(null) const typeInfo = DSR_TYPE_INFO[request.type] const statusInfo = DSR_STATUS_INFO[request.status] const daysRemaining = getDaysRemaining(request.deadline.currentDeadline) const overdue = isOverdue(request) type StatusTransition = { label: string; next: DSRStatus; variant?: 'danger' } const statusTransitions: Partial> = { intake: [{ label: 'Identitaet pruefen', next: 'identity_verification' }], identity_verification: [{ label: 'Bearbeitung starten', next: 'processing' }], processing: [ { label: 'Anfrage abschliessen', next: 'completed' }, { label: 'Ablehnen', next: 'rejected', variant: 'danger' } ] } const transitions = statusTransitions[request.status] || [] const handleStatusChange = async (newStatus: DSRStatus) => { setIsUpdatingStatus(true) setActionError(null) try { await updateSDKDSRStatus(request.id, newStatus) onUpdated() } catch (err: unknown) { setActionError(err instanceof Error ? err.message : 'Unbekannter Fehler') } finally { setIsUpdatingStatus(false) } } const handleExportPDF = () => { window.open(`/api/sdk/v1/compliance/dsr/${request.id}/export`, '_blank') } return ( <> {/* Backdrop */}
{/* Drawer */}
{/* Header */}

{request.referenceNumber}

{typeInfo.article} {typeInfo.labelShort}

{actionError && (
{actionError}
)} {/* Workflow Stepper */}

Bearbeitungsstand

{/* Requester Info */}

Antragsteller

{request.requester.name.charAt(0).toUpperCase()}

{request.requester.name}

{request.requester.email}

{/* Deadline */}

Gesetzliche Frist

{new Date(request.deadline.currentDeadline).toLocaleDateString('de-DE')}

{overdue ? `${Math.abs(daysRemaining)}` : daysRemaining}

{overdue ? 'Tage ueberfaellig' : 'Tage verbleibend'}

{/* Details */}

Status

{statusInfo.label}

Zugewiesen an

{request.assignment?.assignedTo || '—'}

Eingegangen am

{new Date(request.receivedAt).toLocaleDateString('de-DE')}

Identitaet geprueft

{request.identityVerification.verified ? 'Ja' : 'Ausstehend'}

{/* Notes */} {request.notes && (

Notizen

{request.notes}

)} {/* Status Transitions */} {transitions.length > 0 && (

Naechste Schritte

{transitions.map((t) => ( ))}
)}
) }