'use client' import { useState } from 'react' import { BookOpen, Trash2, Save, X } from 'lucide-react' import { EMPTY_CONTROL, VERIFICATION_METHODS, CATEGORY_OPTIONS, TARGET_AUDIENCE_OPTIONS } from './helpers' export function ControlForm({ initial, onSave, onCancel, saving, }: { initial: typeof EMPTY_CONTROL onSave: (data: typeof EMPTY_CONTROL) => void onCancel: () => void saving: boolean }) { const [form, setForm] = useState(initial) const [tagInput, setTagInput] = useState(initial.tags.join(', ')) const [platformInput, setPlatformInput] = useState((initial.scope.platforms || []).join(', ')) const [componentInput, setComponentInput] = useState((initial.scope.components || []).join(', ')) const [dataClassInput, setDataClassInput] = useState((initial.scope.data_classes || []).join(', ')) const handleSave = () => { const data = { ...form, tags: tagInput.split(',').map(t => t.trim()).filter(Boolean), scope: { platforms: platformInput.split(',').map(t => t.trim()).filter(Boolean), components: componentInput.split(',').map(t => t.trim()).filter(Boolean), data_classes: dataClassInput.split(',').map(t => t.trim()).filter(Boolean), }, requirements: form.requirements.filter(r => r.trim()), test_procedure: form.test_procedure.filter(r => r.trim()), evidence: form.evidence.filter(e => e.type.trim() || e.description.trim()), open_anchors: form.open_anchors.filter(a => a.framework.trim() || a.ref.trim()), } onSave(data) } return (

{initial.control_id ? `Control ${initial.control_id} bearbeiten` : 'Neues Control erstellen'}

{/* Basic fields */}
setForm({ ...form, control_id: e.target.value.toUpperCase() })} placeholder="AUTH-003" disabled={!!initial.control_id} className="w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:outline-none disabled:bg-gray-100" />

Format: DOMAIN-NNN (z.B. AUTH-003, NET-005)

setForm({ ...form, title: e.target.value })} placeholder="Control-Titel" className="w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:outline-none" />
setForm({ ...form, risk_score: e.target.value ? parseFloat(e.target.value) : null })} className="w-full px-3 py-2 text-sm border border-gray-300 rounded-lg" />
{/* Objective & Rationale */}