import type { AISystem } from '../engine/types'; const STORAGE_KEY = 'ai-act-kompass/systems/v1'; /** Format der Export-/Import-Datei. */ export interface ExportFile { readonly app: 'ai-act-kompass'; readonly schemaVersion: 1; readonly exportedAt: string; readonly systems: readonly AISystem[]; } /** * Lädt alle registrierten KI-Systeme aus dem lokalen Speicher. * Bei defekten Daten wird eine leere Liste zurückgegeben (fail-safe). */ export function loadSystems(): readonly AISystem[] { try { const raw = localStorage.getItem(STORAGE_KEY); if (!raw) return []; const parsed: unknown = JSON.parse(raw); return Array.isArray(parsed) ? (parsed as AISystem[]) : []; } catch { return []; } } /** * Persistiert die Systemliste im lokalen Speicher des Browsers. * Es verlassen keine Daten das Gerät. */ export function saveSystems(systems: readonly AISystem[]): void { localStorage.setItem(STORAGE_KEY, JSON.stringify(systems)); } /** * Serialisiert alle Daten als Export-Datei (JSON) für Backup/Umzug. * * @param systems - Zu exportierende Systeme * @param exportedAt - Zeitstempel im ISO-Format */ export function exportData(systems: readonly AISystem[], exportedAt: string): string { const file: ExportFile = { app: 'ai-act-kompass', schemaVersion: 1, exportedAt, systems, }; return JSON.stringify(file, null, 2); } /** * Liest eine Export-Datei ein und validiert das Grundformat. * * @param json - Inhalt der Export-Datei * @returns Systeme aus der Datei * @throws Error bei unbekanntem oder defektem Format */ export function importData(json: string): readonly AISystem[] { const parsed: unknown = JSON.parse(json); if ( typeof parsed !== 'object' || parsed === null || (parsed as ExportFile).app !== 'ai-act-kompass' || !Array.isArray((parsed as ExportFile).systems) ) { throw new Error('Unbekanntes Dateiformat — keine gültige AI-Act-Kompass-Exportdatei.'); } return (parsed as ExportFile).systems; } /** Löscht alle lokal gespeicherten Daten unwiderruflich. */ export function clearAll(): void { localStorage.removeItem(STORAGE_KEY); }