'use client' import React, { useState, useCallback } from 'react' import type { ScopeDecision, ScopeProfilingAnswer } from '@/lib/sdk/compliance-scope-types' import { DEPTH_LEVEL_LABELS, DOCUMENT_TYPE_LABELS } from '@/lib/sdk/compliance-scope-types' interface ScopeExportTabProps { decision: ScopeDecision | null answers: ScopeProfilingAnswer[] } export function ScopeExportTab({ decision, answers }: ScopeExportTabProps) { const [copiedMarkdown, setCopiedMarkdown] = useState(false) const handleDownloadJSON = useCallback(() => { if (!decision) return const dataStr = JSON.stringify(decision, null, 2) const dataBlob = new Blob([dataStr], { type: 'application/json' }) const url = URL.createObjectURL(dataBlob) const link = document.createElement('a') link.href = url link.download = `compliance-scope-decision-${new Date().toISOString().split('T')[0]}.json` link.click() URL.revokeObjectURL(url) }, [decision]) const handleDownloadCSV = useCallback(() => { if (!decision || !decision.requiredDocuments) return const headers = ['Typ', 'Tiefe', 'Aufwand (Tage)', 'Pflicht', 'Hard-Trigger'] const rows = decision.requiredDocuments.map((doc) => [ DOCUMENT_TYPE_LABELS[doc.documentType] || doc.documentType, doc.depthDescription, doc.effortEstimate?.days?.toString() || '0', doc.isMandatory ? 'Ja' : 'Nein', doc.triggeredByHardTrigger ? 'Ja' : 'Nein', ]) const csvContent = [headers, ...rows].map((row) => row.map((cell) => `"${cell}"`).join(',')).join('\n') const dataBlob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' }) const url = URL.createObjectURL(dataBlob) const link = document.createElement('a') link.href = url link.download = `compliance-scope-documents-${new Date().toISOString().split('T')[0]}.csv` link.click() URL.revokeObjectURL(url) }, [decision]) const generateMarkdownSummary = useCallback(() => { if (!decision) return '' let markdown = `# Compliance Scope Entscheidung\n\n` markdown += `**Datum:** ${new Date().toLocaleDateString('de-DE')}\n\n` markdown += `## Einstufung\n\n` markdown += `**Level:** ${decision.level} - ${DEPTH_LEVEL_LABELS[decision.level]}\n\n` if (decision.reasoning) { markdown += `**Begründung:** ${decision.reasoning}\n\n` } if (decision.scores) { markdown += `## Scores\n\n` markdown += `- **Risiko-Score:** ${decision.scores.riskScore}/100\n` markdown += `- **Komplexitäts-Score:** ${decision.scores.complexityScore}/100\n` markdown += `- **Assurance-Score:** ${decision.scores.assuranceScore}/100\n` markdown += `- **Gesamt-Score:** ${decision.scores.compositeScore}/100\n\n` } if (decision.hardTriggers && decision.hardTriggers.length > 0) { const matchedTriggers = decision.hardTriggers.filter((ht) => ht.matched) if (matchedTriggers.length > 0) { markdown += `## Aktive Hard-Trigger\n\n` matchedTriggers.forEach((trigger) => { markdown += `- **${trigger.label}**\n` markdown += ` - ${trigger.description}\n` if (trigger.legalReference) { markdown += ` - Rechtsgrundlage: ${trigger.legalReference}\n` } }) markdown += `\n` } } if (decision.requiredDocuments && decision.requiredDocuments.length > 0) { markdown += `## Erforderliche Dokumente\n\n` markdown += `| Typ | Tiefe | Aufwand | Pflicht | Hard-Trigger |\n` markdown += `|-----|-------|---------|---------|-------------|\n` decision.requiredDocuments.forEach((doc) => { markdown += `| ${DOCUMENT_TYPE_LABELS[doc.documentType] || doc.documentType} | ${doc.depthDescription} | ${ doc.effortEstimate?.days || 0 } Tage | ${doc.isMandatory ? 'Ja' : 'Nein'} | ${doc.triggeredByHardTrigger ? 'Ja' : 'Nein'} |\n` }) markdown += `\n` } if (decision.riskFlags && decision.riskFlags.length > 0) { markdown += `## Risiko-Flags\n\n` decision.riskFlags.forEach((flag) => { markdown += `### ${flag.title} (${flag.severity})\n\n` markdown += `${flag.description}\n\n` markdown += `**Empfehlung:** ${flag.recommendation}\n\n` }) } if (decision.nextActions && decision.nextActions.length > 0) { markdown += `## Nächste Schritte\n\n` decision.nextActions.forEach((action) => { markdown += `${action.priority}. **${action.title}**\n` markdown += ` ${action.description}\n` if (action.effortDays) { markdown += ` Aufwand: ${action.effortDays} Tage\n` } markdown += `\n` }) } return markdown }, [decision]) const handleCopyMarkdown = useCallback(() => { const markdown = generateMarkdownSummary() navigator.clipboard.writeText(markdown).then(() => { setCopiedMarkdown(true) setTimeout(() => setCopiedMarkdown(false), 2000) }) }, [generateMarkdownSummary]) const handlePrintView = useCallback(() => { if (!decision) return const markdown = generateMarkdownSummary() const htmlContent = ` Compliance Scope Entscheidung
${markdown}
` const printWindow = window.open('', '_blank') if (printWindow) { printWindow.document.write(htmlContent) printWindow.document.close() printWindow.focus() setTimeout(() => printWindow.print(), 250) } }, [decision, generateMarkdownSummary]) if (!decision) { return (

Keine Daten zum Export

Bitte führen Sie zuerst das Scope-Profiling durch.

) } return (
{/* JSON Export */}

JSON Export

Exportieren Sie die vollständige Entscheidung als strukturierte JSON-Datei für weitere Verarbeitung oder Archivierung.

{/* CSV Export */}

CSV Export

Exportieren Sie die Liste der erforderlichen Dokumente als CSV-Datei für Excel, Google Sheets oder andere Tabellenkalkulationen.

{/* Markdown Summary */}

Markdown-Zusammenfassung

Strukturierte Zusammenfassung im Markdown-Format für Dokumentation oder Berichte.