'use client' import React, { useState } from 'react' import { PRIORITY_COLORS, PRIORITY_LABELS, STATUS_COLORS, STATUS_LABELS, STATUS_NEXT, type Obligation, } from '../_types' export default function ObligationDetail({ obligation, onClose, onStatusChange, onEdit, onDelete }: { obligation: Obligation onClose: () => void onStatusChange: (id: string, status: string) => Promise onEdit: () => void onDelete: (id: string) => Promise }) { const [saving, setSaving] = useState(false) const handleStatusCycle = async () => { setSaving(true) await onStatusChange(obligation.id, STATUS_NEXT[obligation.status]) setSaving(false) } const handleDelete = async () => { if (!confirm('Pflicht wirklich loeschen?')) return await onDelete(obligation.id) onClose() } const daysUntil = obligation.deadline ? Math.ceil((new Date(obligation.deadline).getTime() - Date.now()) / 86400000) : null return (
e.target === e.currentTarget && onClose()}>
{PRIORITY_LABELS[obligation.priority]} {STATUS_LABELS[obligation.status]} {obligation.source && ( {obligation.source} {obligation.source_article} )}

{obligation.title}

{obligation.description && (

{obligation.description}

)}
Verantwortlich

{obligation.responsible || '—'}

Frist

{obligation.deadline ? `${new Date(obligation.deadline).toLocaleDateString('de-DE')}${daysUntil !== null ? ` (${daysUntil < 0 ? `${Math.abs(daysUntil)}d ueberfaellig` : `${daysUntil}d`})` : ''}` : '—'}

{obligation.linked_systems?.length > 0 && (
Betroffene Systeme
{obligation.linked_systems.map(s => ( {s} ))}
)} {obligation.notes && (
Notizen

{obligation.notes}

)} {obligation.rule_code && (
Aus UCCA Assessment abgeleitet · Regel {obligation.rule_code}
)} {obligation.created_at && (

Erstellt: {new Date(obligation.created_at).toLocaleDateString('de-DE')} {obligation.updated_at && obligation.updated_at !== obligation.created_at ? ` · Geaendert: ${new Date(obligation.updated_at).toLocaleDateString('de-DE')}` : ''}

)}
{obligation.status !== 'completed' && ( )}
) }