/**
 * Incident Mock Data (Demo-Daten fuer Entwicklung und Tests)
 */

import {
  Incident,
  IncidentStatistics,
} from './types'

/**
 * Erstellt Demo-Vorfaelle fuer die Entwicklung
 */
export function createMockIncidents(): Incident[] {
  const now = new Date()

  return [
    // 1. Gerade erkannt - noch nicht bewertet (detected/new)
    {
      id: 'inc-001',
      referenceNumber: 'INC-2026-000001',
      title: 'Unbefugter Zugriff auf Schuelerdatenbank',
      description: 'Ein ehemaliger Mitarbeiter hat sich mit noch aktiven Zugangsdaten in die Schuelerdatenbank eingeloggt. Der Zugriff wurde durch die Log-Analyse entdeckt.',
      category: 'unauthorized_access',
      severity: 'high',
      status: 'detected',
      detectedAt: new Date(now.getTime() - 3 * 60 * 60 * 1000).toISOString(),
      detectedBy: 'Log-Analyse (automatisiert)',
      affectedSystems: ['Schuelerdatenbank', 'Schulverwaltungssystem'],
      affectedDataCategories: ['Personenbezogene Daten', 'Daten von Kindern', 'Gesundheitsdaten'],
      estimatedAffectedPersons: 800,
      riskAssessment: null,
      authorityNotification: null,
      dataSubjectNotification: null,
      measures: [],
      timeline: [
        {
          id: 'tl-001',
          incidentId: 'inc-001',
          timestamp: new Date(now.getTime() - 3 * 60 * 60 * 1000).toISOString(),
          action: 'Vorfall erkannt',
          description: 'Automatische Log-Analyse meldet verdaechtigen Login eines deaktivierten Kontos',
          performedBy: 'SIEM-System'
        }
      ],
      assignedTo: undefined
    },

    // 2. In Bewertung (assessment) - Risikobewertung laeuft
    {
      id: 'inc-002',
      referenceNumber: 'INC-2026-000002',
      title: 'E-Mail mit Kundendaten an falschen Empfaenger',
      description: 'Ein Mitarbeiter hat eine Excel-Datei mit Kundendaten (Name, Adresse, Vertragsnummer) an einen falschen E-Mail-Empfaenger gesendet. Der Empfaenger wurde kontaktiert und hat die Loeschung bestaetigt.',
      category: 'data_breach',
      severity: 'medium',
      status: 'assessment',
      detectedAt: new Date(now.getTime() - 18 * 60 * 60 * 1000).toISOString(),
      detectedBy: 'Vertriebsabteilung',
      affectedSystems: ['E-Mail-System (Exchange)'],
      affectedDataCategories: ['Personenbezogene Daten', 'Kundendaten'],
      estimatedAffectedPersons: 150,
      riskAssessment: {
        id: 'ra-002',
        assessedBy: 'DSB Mueller',
        assessedAt: new Date(now.getTime() - 12 * 60 * 60 * 1000).toISOString(),
        likelihoodScore: 3,
        impactScore: 2,
        overallRisk: 'medium',
        notificationRequired: false,
        reasoning: 'Empfaenger hat Loeschung bestaetigt. Datenkategorie: allgemeine Kontaktdaten und Vertragsnummern. Geringes Risiko fuer betroffene Personen.'
      },
      authorityNotification: {
        id: 'an-002',
        authority: 'LfD Niedersachsen',
        deadline72h: new Date(new Date(now.getTime() - 18 * 60 * 60 * 1000).getTime() + 72 * 60 * 60 * 1000).toISOString(),
        status: 'pending',
        formData: {}
      },
      dataSubjectNotification: null,
      measures: [
        {
          id: 'meas-001',
          incidentId: 'inc-002',
          title: 'Empfaenger kontaktiert',
          description: 'Falscher Empfaenger kontaktiert mit Bitte um Loeschung',
          type: 'immediate',
          status: 'completed',
          responsible: 'Vertriebsleitung',
          dueDate: new Date(now.getTime() - 16 * 60 * 60 * 1000).toISOString(),
          completedAt: new Date(now.getTime() - 15 * 60 * 60 * 1000).toISOString()
        }
      ],
      timeline: [
        {
          id: 'tl-002',
          incidentId: 'inc-002',
          timestamp: new Date(now.getTime() - 18 * 60 * 60 * 1000).toISOString(),
          action: 'Vorfall gemeldet',
          description: 'Mitarbeiter meldet versehentlichen E-Mail-Versand',
          performedBy: 'M. Schmidt (Vertrieb)'
        },
        {
          id: 'tl-003',
          incidentId: 'inc-002',
          timestamp: new Date(now.getTime() - 15 * 60 * 60 * 1000).toISOString(),
          action: 'Sofortmassnahme',
          description: 'Empfaenger kontaktiert und Loeschung bestaetigt',
          performedBy: 'Vertriebsleitung'
        },
        {
          id: 'tl-004',
          incidentId: 'inc-002',
          timestamp: new Date(now.getTime() - 12 * 60 * 60 * 1000).toISOString(),
          action: 'Risikobewertung',
          description: 'Bewertung durchgefuehrt - mittleres Risiko, keine Meldepflicht',
          performedBy: 'DSB Mueller'
        }
      ],
      assignedTo: 'DSB Mueller'
    },

    // 3. Gemeldet (notification_sent) - Ransomware-Angriff
    {
      id: 'inc-003',
      referenceNumber: 'INC-2026-000003',
      title: 'Ransomware-Angriff auf Dateiserver',
      description: 'Am Montagmorgen wurde ein Ransomware-Angriff auf den zentralen Dateiserver erkannt. Mehrere verschluesselte Dateien wurden identifiziert. Der Angriffsvektor war eine Phishing-E-Mail an einen Mitarbeiter.',
      category: 'ransomware',
      severity: 'critical',
      status: 'notification_sent',
      detectedAt: new Date(now.getTime() - 5 * 24 * 60 * 60 * 1000).toISOString(),
      detectedBy: 'IT-Sicherheitsteam',
      affectedSystems: ['Dateiserver (FS-01)', 'E-Mail-System', 'Backup-Server'],
      affectedDataCategories: ['Personenbezogene Daten', 'Beschaeftigtendaten', 'Kundendaten', 'Finanzdaten'],
      estimatedAffectedPersons: 2500,
      riskAssessment: {
        id: 'ra-003',
        assessedBy: 'DSB Mueller',
        assessedAt: new Date(now.getTime() - 4.5 * 24 * 60 * 60 * 1000).toISOString(),
        likelihoodScore: 5,
        impactScore: 5,
        overallRisk: 'critical',
        notificationRequired: true,
        reasoning: 'Hohes Risiko fuer Rechte und Freiheiten der betroffenen Personen durch potentiellen Zugriff auf personenbezogene Daten und Finanzdaten. Verschluesselung betrifft Verfuegbarkeit, Exfiltration nicht auszuschliessen.'
      },
      authorityNotification: {
        id: 'an-003',
        authority: 'LfD Niedersachsen',
        deadline72h: new Date(new Date(now.getTime() - 5 * 24 * 60 * 60 * 1000).getTime() + 72 * 60 * 60 * 1000).toISOString(),
        submittedAt: new Date(now.getTime() - 4 * 24 * 60 * 60 * 1000).toISOString(),
        status: 'submitted',
        formData: {
          referenceNumber: 'LfD-NI-2026-04821',
          incidentType: 'Ransomware',
          affectedPersons: 2500
        },
        pdfUrl: '/api/sdk/v1/incidents/inc-003/authority-form.pdf'
      },
      dataSubjectNotification: {
        id: 'dsn-003',
        notificationRequired: true,
        templateText: 'Sehr geehrte Damen und Herren, wir informieren Sie ueber einen Sicherheitsvorfall, bei dem moeglicherweise Ihre personenbezogenen Daten betroffen sind...',
        sentAt: new Date(now.getTime() - 3 * 24 * 60 * 60 * 1000).toISOString(),
        recipientCount: 2500,
        method: 'email'
      },
      measures: [
        {
          id: 'meas-002',
          incidentId: 'inc-003',
          title: 'Netzwerksegmentierung',
          description: 'Betroffene Systeme vom Netzwerk isoliert',
          type: 'immediate',
          status: 'completed',
          responsible: 'IT-Sicherheitsteam',
          dueDate: new Date(now.getTime() - 4.8 * 24 * 60 * 60 * 1000).toISOString(),
          completedAt: new Date(now.getTime() - 4.9 * 24 * 60 * 60 * 1000).toISOString()
        },
        {
          id: 'meas-003',
          incidentId: 'inc-003',
          title: 'Passwoerter zuruecksetzen',
          description: 'Alle Benutzerpasswoerter zurueckgesetzt',
          type: 'immediate',
          status: 'completed',
          responsible: 'IT-Administration',
          dueDate: new Date(now.getTime() - 4.5 * 24 * 60 * 60 * 1000).toISOString(),
          completedAt: new Date(now.getTime() - 4.5 * 24 * 60 * 60 * 1000).toISOString()
        },
        {
          id: 'meas-004',
          incidentId: 'inc-003',
          title: 'E-Mail-Security Gateway implementieren',
          description: 'Implementierung eines fortgeschrittenen E-Mail-Sicherheitsgateways mit Sandboxing',
          type: 'preventive',
          status: 'in_progress',
          responsible: 'IT-Sicherheitsteam',
          dueDate: new Date(now.getTime() + 30 * 24 * 60 * 60 * 1000).toISOString()
        },
        {
          id: 'meas-005',
          incidentId: 'inc-003',
          title: 'Mitarbeiterschulung Phishing',
          description: 'Verpflichtende Schulung fuer alle Mitarbeiter zum Thema Phishing-Erkennung',
          type: 'preventive',
          status: 'planned',
          responsible: 'Personalwesen',
          dueDate: new Date(now.getTime() + 60 * 24 * 60 * 60 * 1000).toISOString()
        }
      ],
      timeline: [
        {
          id: 'tl-005',
          incidentId: 'inc-003',
          timestamp: new Date(now.getTime() - 5 * 24 * 60 * 60 * 1000).toISOString(),
          action: 'Vorfall erkannt',
          description: 'IT-Sicherheitsteam erkennt ungewoehnliche Verschluesselungsaktivitaet',
          performedBy: 'IT-Sicherheitsteam'
        },
        {
          id: 'tl-006',
          incidentId: 'inc-003',
          timestamp: new Date(now.getTime() - 4.9 * 24 * 60 * 60 * 1000).toISOString(),
          action: 'Eindaemmung gestartet',
          description: 'Netzwerksegmentierung und Isolation betroffener Systeme',
          performedBy: 'IT-Sicherheitsteam'
        },
        {
          id: 'tl-007',
          incidentId: 'inc-003',
          timestamp: new Date(now.getTime() - 4.5 * 24 * 60 * 60 * 1000).toISOString(),
          action: 'Risikobewertung abgeschlossen',
          description: 'Kritisches Risiko festgestellt - Meldepflicht ausgeloest',
          performedBy: 'DSB Mueller'
        },
        {
          id: 'tl-008',
          incidentId: 'inc-003',
          timestamp: new Date(now.getTime() - 4 * 24 * 60 * 60 * 1000).toISOString(),
          action: 'Behoerdenbenachrichtigung',
          description: 'Meldung an LfD Niedersachsen eingereicht',
          performedBy: 'DSB Mueller'
        },
        {
          id: 'tl-009',
          incidentId: 'inc-003',
          timestamp: new Date(now.getTime() - 3 * 24 * 60 * 60 * 1000).toISOString(),
          action: 'Betroffene benachrichtigt',
          description: '2.500 betroffene Personen per E-Mail informiert',
          performedBy: 'Kommunikationsabteilung'
        }
      ],
      assignedTo: 'DSB Mueller'
    },

    // 4. Abgeschlossener Vorfall (closed) - Phishing
    {
      id: 'inc-004',
      referenceNumber: 'INC-2026-000004',
      title: 'Phishing-Angriff auf Personalabteilung',
      description: 'Gezielter Phishing-Angriff auf die Personalabteilung. Ein Mitarbeiter hat Zugangsdaten auf einer gefaelschten Login-Seite eingegeben. Das Konto wurde sofort gesperrt. Keine Datenexfiltration festgestellt.',
      category: 'phishing',
      severity: 'high',
      status: 'closed',
      detectedAt: new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000).toISOString(),
      detectedBy: 'IT-Sicherheitsteam (SIEM-Alert)',
      affectedSystems: ['Active Directory', 'HR-Portal'],
      affectedDataCategories: ['Beschaeftigtendaten', 'Personenbezogene Daten'],
      estimatedAffectedPersons: 0,
      riskAssessment: {
        id: 'ra-004',
        assessedBy: 'DSB Mueller',
        assessedAt: new Date(now.getTime() - 29 * 24 * 60 * 60 * 1000).toISOString(),
        likelihoodScore: 4,
        impactScore: 3,
        overallRisk: 'high',
        notificationRequired: true,
        reasoning: 'Zugangsdaten kompromittiert, potentieller Zugriff auf Personaldaten. Keine Exfiltration festgestellt, dennoch Meldung wegen Kompromittierung der Zugangsdaten.'
      },
      authorityNotification: {
        id: 'an-004',
        authority: 'LfD Niedersachsen',
        deadline72h: new Date(new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000).getTime() + 72 * 60 * 60 * 1000).toISOString(),
        submittedAt: new Date(now.getTime() - 29 * 24 * 60 * 60 * 1000).toISOString(),
        status: 'acknowledged',
        formData: {
          referenceNumber: 'LfD-NI-2026-03912',
          incidentType: 'Phishing',
          affectedPersons: 0
        }
      },
      dataSubjectNotification: {
        id: 'dsn-004',
        notificationRequired: false,
        templateText: '',
        recipientCount: 0,
        method: 'email'
      },
      measures: [
        {
          id: 'meas-006',
          incidentId: 'inc-004',
          title: 'Konto gesperrt',
          description: 'Kompromittiertes Benutzerkonto sofort gesperrt',
          type: 'immediate',
          status: 'completed',
          responsible: 'IT-Administration',
          dueDate: new Date(now.getTime() - 29.8 * 24 * 60 * 60 * 1000).toISOString(),
          completedAt: new Date(now.getTime() - 29.9 * 24 * 60 * 60 * 1000).toISOString()
        },
        {
          id: 'meas-007',
          incidentId: 'inc-004',
          title: 'MFA fuer alle Mitarbeiter',
          description: 'Einfuehrung von Multi-Faktor-Authentifizierung fuer alle Konten',
          type: 'preventive',
          status: 'completed',
          responsible: 'IT-Sicherheitsteam',
          dueDate: new Date(now.getTime() - 10 * 24 * 60 * 60 * 1000).toISOString(),
          completedAt: new Date(now.getTime() - 12 * 24 * 60 * 60 * 1000).toISOString()
        }
      ],
      timeline: [
        {
          id: 'tl-010',
          incidentId: 'inc-004',
          timestamp: new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000).toISOString(),
          action: 'SIEM-Alert',
          description: 'Verdaechtiger Login-Versuch aus unbekannter Region erkannt',
          performedBy: 'IT-Sicherheitsteam'
        },
        {
          id: 'tl-011',
          incidentId: 'inc-004',
          timestamp: new Date(now.getTime() - 29 * 24 * 60 * 60 * 1000).toISOString(),
          action: 'Behoerdenbenachrichtigung',
          description: 'Meldung an LfD Niedersachsen',
          performedBy: 'DSB Mueller'
        },
        {
          id: 'tl-012',
          incidentId: 'inc-004',
          timestamp: new Date(now.getTime() - 15 * 24 * 60 * 60 * 1000).toISOString(),
          action: 'Vorfall abgeschlossen',
          description: 'Alle Massnahmen umgesetzt, keine Datenexfiltration festgestellt',
          performedBy: 'DSB Mueller'
        }
      ],
      assignedTo: 'DSB Mueller',
      closedAt: new Date(now.getTime() - 15 * 24 * 60 * 60 * 1000).toISOString(),
      lessonsLearned: '1. MFA haette den Zugriff verhindert (jetzt implementiert). 2. E-Mail-Security-Gateway muss verbesserte Phishing-Erkennung erhalten. 3. Regelmaessige Phishing-Simulationen fuer alle Mitarbeiter einfuehren.'
    }
  ]
}

/**
 * Erstellt Mock-Statistiken fuer die Entwicklung
 */
export function createMockStatistics(): IncidentStatistics {
  return {
    totalIncidents: 4,
    openIncidents: 3,
    notificationsPending: 1,
    averageResponseTimeHours: 8.5,
    bySeverity: {
      low: 0,
      medium: 1,
      high: 2,
      critical: 1
    },
    byCategory: {
      data_breach: 1,
      unauthorized_access: 1,
      data_loss: 0,
      system_compromise: 0,
      phishing: 1,
      ransomware: 1,
      insider_threat: 0,
      physical_breach: 0,
      other: 0
    },
    byStatus: {
      detected: 1,
      assessment: 1,
      containment: 0,
      notification_required: 0,
      notification_sent: 1,
      remediation: 0,
      closed: 1
    }
  }
}
