/**
 * Verbotene KI-Anwendungsfaelle nach Art. 5 EU AI Act (2024/1689)
 *
 * Seit Februar 2025 sind diese Praktiken in der EU ausdruecklich verboten.
 * Dieses Modul stellt einen strukturierten Katalog bereit, der sowohl
 * im SDK-Frontend als auch via RAG fuer den Compliance Advisor nutzbar ist.
 *
 * Quellen:
 * - EU AI Act Art. 5 (Verbotene Praktiken), Verordnung (EU) 2024/1689
 * - LG Muenchen I, 11.11.2025 (42 O 14139/24) — amtliches Werk nach §5 UrhG
 */

// =============================================================================
// Types
// =============================================================================

export type ProhibitionSeverity = 'absolute' | 'conditional'

export type ProhibitionCategory =
  | 'manipulation'
  | 'vulnerability_exploitation'
  | 'social_scoring'
  | 'biometric_surveillance'
  | 'predictive_policing'
  | 'emotion_recognition'
  | 'biometric_categorization'
  | 'copyright_violation'

export interface ProhibitedAIPractice {
  id: string
  title: string
  titleEN: string
  category: ProhibitionCategory
  severity: ProhibitionSeverity
  legalBasis: string
  description: string
  examples: string[]
  exceptions?: string[]
  /** Stichworte fuer automatische Erkennung */
  detectionKeywords: string[]
  /** Relevante Gerichtsentscheidungen */
  caseLaw?: CaseLawReference[]
}

export interface CaseLawReference {
  id: string
  court: string
  date: string
  reference: string
  title: string
  summary: string
  relevance: string
  sourceUrl?: string
  /** Amtliche Werke nach §5 UrhG — keine Lizenzpflicht */
  licenseNote: string
}

// =============================================================================
// Verbotskatalog Art. 5 AI Act
// =============================================================================

export const PROHIBITED_AI_PRACTICES: ProhibitedAIPractice[] = [
  // --- Absolut verboten ---
  {
    id: 'VERBOT-01',
    title: 'Irrefuehrende Manipulation',
    titleEN: 'Subliminal Manipulation',
    category: 'manipulation',
    severity: 'absolute',
    legalBasis: 'Art. 5 Abs. 1 lit. a AI Act',
    description:
      'KI-Systeme, die durch unterschwellige Techniken oder absichtlich manipulative/taeuschende Methoden ' +
      'das Verhalten von Personen wesentlich beeinflussen und ihnen dadurch erheblichen Schaden zufuegen oder ' +
      'zufuegen koennen. Beispiel: Sprachgesteuertes Spielzeug, das Kinder zu gefaehrlichem Verhalten animiert.',
    examples: [
      'Sprachgesteuertes Spielzeug mit manipulativen Inhalten fuer Kinder',
      'Unterschwellige Audio-/Videobotschaften zur Verhaltenssteuerung',
      'Dark Patterns in KI-Interfaces, die zu schaedlichen Entscheidungen fuehren',
      'KI-generierte Deepfakes zur politischen Manipulation',
    ],
    detectionKeywords: [
      'manipulation', 'unterschwellig', 'subliminal', 'taeuschung', 'dark pattern',
      'verhaltenssteuerung', 'beeinflussung', 'deepfake', 'desinformation',
    ],
  },
  {
    id: 'VERBOT-02',
    title: 'Ausnutzung von Schwaechen',
    titleEN: 'Exploitation of Vulnerabilities',
    category: 'vulnerability_exploitation',
    severity: 'absolute',
    legalBasis: 'Art. 5 Abs. 1 lit. b AI Act',
    description:
      'KI-Systeme, die gezielt die Verletzlichkeit bestimmter Personen oder Gruppen ausnutzen — ' +
      'etwa aufgrund von Alter, Behinderung, sozialer oder wirtschaftlicher Situation — ' +
      'um deren Verhalten wesentlich zu beeinflussen und ihnen dadurch erheblichen Schaden zuzufuegen.',
    examples: [
      'KI-Werbung, die gezielt aeltere oder kognitiv eingeschraenkte Menschen zu Kaeufen verleitet',
      'Sucht-foerdernde Algorithmen, die psychische Vulnerabilitaet ausnutzen',
      'Finanzprodukt-Empfehlungen, die wirtschaftliche Notlagen ausnutzen',
      'Gamification-KI, die Kinder zur uebermassigen Nutzung verleitet',
    ],
    detectionKeywords: [
      'schwaeche', 'vulnerabel', 'alter', 'behinderung', 'kinder', 'sucht',
      'ausnutz', 'manipulation minderjahrig', 'schutzbeduerft',
    ],
  },
  {
    id: 'VERBOT-03',
    title: 'Social Scoring',
    titleEN: 'Social Scoring',
    category: 'social_scoring',
    severity: 'absolute',
    legalBasis: 'Art. 5 Abs. 1 lit. c AI Act',
    description:
      'KI-Systeme zur Bewertung oder Klassifizierung natuerlicher Personen auf Grundlage ihres Sozialverhaltens ' +
      'oder persoenlicher Eigenschaften, wenn dies zu einer ungerechtfertigten oder unverhaeltnismaessigen ' +
      'Benachteiligung fuehrt — insbesondere in Kontexten, die keinen Bezug zur urspruenglichen Datenerhebung haben.',
    examples: [
      'Bewertungssysteme auf Basis von Social-Media-Aktivitaeten',
      'Scoring anhand von Internet-Surfverhalten fuer Kreditwuerdigkeit',
      'Verhaltensbasierte Bewertung von Buergern durch Behoerden',
      'Zugangssteuerung zu oeffentlichen Leistungen basierend auf Verhaltensdaten',
    ],
    detectionKeywords: [
      'social scoring', 'sozialkredit', 'verhaltensbewertung', 'buergerscore',
      'personenbewertung', 'social media scoring', 'reputation score',
    ],
  },
  {
    id: 'VERBOT-04',
    title: 'Ungezielte Gesichtsdatensammlung',
    titleEN: 'Untargeted Facial Image Scraping',
    category: 'biometric_surveillance',
    severity: 'absolute',
    legalBasis: 'Art. 5 Abs. 1 lit. e AI Act',
    description:
      'KI-Systeme, die ungezielt Gesichtsbilder aus dem Internet oder von Ueberwachungskameras ' +
      'sammeln, um biometrische Datenbanken aufzubauen. Prominentes Beispiel: Clearview AI.',
    examples: [
      'Scraping von Gesichtsbildern aus sozialen Netzwerken (Clearview AI)',
      'Aufbau biometrischer Datenbanken aus Ueberwachungskameraaufnahmen',
      'Sammlung von Portraetfotos ohne Wissen der Betroffenen',
      'Web-Crawling zur Erstellung von Gesichtserkennungs-Trainingsdaten',
    ],
    detectionKeywords: [
      'gesichtserkennung', 'facial recognition', 'biometrisch', 'clearview',
      'gesichtsdatenbank', 'scraping gesicht', 'face scraping',
    ],
  },
  {
    id: 'VERBOT-05',
    title: 'Biometrische Echtzeit-Ueberwachung',
    titleEN: 'Real-time Biometric Surveillance in Public Spaces',
    category: 'biometric_surveillance',
    severity: 'absolute',
    legalBasis: 'Art. 5 Abs. 1 lit. h AI Act',
    description:
      'Biometrische Echtzeit-Fernidentifizierung im oeffentlich zugaenglichen Raum zu Strafverfolgungszwecken ' +
      'ist grundsaetzlich verboten. Ausnahmen bestehen nur bei konkretem, begruendetem Tatverdacht unter ' +
      'strikten Voraussetzungen.',
    examples: [
      'Live-Gesichtserkennung durch Polizei an oeffentlichen Plaetzen',
      'Echtzeit-Identifikation an Bahnhoefen oder Flughaefen ohne konkreten Anlass',
      'Permanente biometrische Ueberwachung in Fussballstadien',
    ],
    exceptions: [
      'Gezielte Suche nach Opfern von Entfuehrung oder Menschenhandel',
      'Verhinderung einer konkreten, erheblichen Bedrohung fuer Leib und Leben',
      'Identifizierung von Verdaechtigen schwerer Straftaten (unter richterlicher Genehmigung)',
    ],
    detectionKeywords: [
      'echtzeit', 'live', 'ueberwachung', 'surveillance', 'oeffentlicher raum',
      'fernidentifizierung', 'real-time', 'biometric identification',
    ],
  },

  // --- Bedingt / teilweise verboten ---
  {
    id: 'VERBOT-06',
    title: 'Predictive Policing auf Personenprofilen',
    titleEN: 'Profile-based Predictive Policing',
    category: 'predictive_policing',
    severity: 'conditional',
    legalBasis: 'Art. 5 Abs. 1 lit. d AI Act',
    description:
      'KI-Systeme zur Erstellung von Risikobewertungen natuerlicher Personen zur Vorhersage von Straftaten ' +
      'allein auf Grundlage von Profiling oder Persoenlichkeitsmerkmalen. Ortsbezogene Analysen ' +
      '(Hotspot-Policing) sind hiervon nicht erfasst.',
    examples: [
      'Persoenlichkeitsprofilbasierte Straftaten-Vorhersage',
      'KI-Score zur Bewertung der Rueckfallgefahr ohne konkreten Anlass',
      'Vorausschauende Ueberwachung auf Basis ethnischer Profile',
    ],
    exceptions: [
      'Ortsbezogene Kriminalitaetsanalysen (Hotspot-Policing) ohne Personenbezug',
      'Strafverfolgung mit konkretem Anfangsverdacht und richterlicher Anordnung',
    ],
    detectionKeywords: [
      'predictive policing', 'vorhersage straftat', 'risikobewertung person',
      'profiling polizei', 'rueckfallprognose', 'kriminalitaetsprognose',
    ],
  },
  {
    id: 'VERBOT-07',
    title: 'Biometrische Kategorisierung sensibler Merkmale',
    titleEN: 'Biometric Categorization of Sensitive Attributes',
    category: 'biometric_categorization',
    severity: 'conditional',
    legalBasis: 'Art. 5 Abs. 1 lit. g AI Act',
    description:
      'KI-Systeme zur biometrischen Kategorisierung, die Rueckschluesse auf Rasse, politische Meinungen, ' +
      'Gewerkschaftszugehoerigkeit, religioese oder weltanschauliche Ueberzeugungen, Sexualleben oder ' +
      'sexuelle Orientierung ziehen. Ausnahme: Strafverfolgung unter engen Voraussetzungen.',
    examples: [
      'Gesichtsanalyse zur Erkennung ethnischer Zugehoerigkeit',
      'Stimmanalyse zur Ableitung sexueller Orientierung',
      'Gangerkennung zur Kategorisierung nach Religionszugehoerigkeit',
    ],
    exceptions: [
      'Strafverfolgung unter eng definierten gesetzlichen Voraussetzungen',
      'Kennzeichnung oder Filterung rechtmaessig erworbener biometrischer Datensaetze',
    ],
    detectionKeywords: [
      'biometrisch', 'rasse', 'ethni', 'religion', 'sexuell', 'kategorisierung',
      'gesichtsanalyse', 'stimmanalyse', 'gang erkennung',
    ],
  },
  {
    id: 'VERBOT-08',
    title: 'Emotionserkennung am Arbeitsplatz und in Schulen',
    titleEN: 'Emotion Recognition in Workplaces and Schools',
    category: 'emotion_recognition',
    severity: 'conditional',
    legalBasis: 'Art. 5 Abs. 1 lit. f AI Act',
    description:
      'KI-Systeme zur fortlaufenden Erkennung von Emotionen von Beschaeftigten am Arbeitsplatz oder ' +
      'von Lernenden in Bildungseinrichtungen. Erlaubt nur mit medizinischem oder ' +
      'sicherheitstechnischem Rechtfertigungsgrund.',
    examples: [
      'Webcam-basierte Aufmerksamkeitsueberwachung im Unterricht',
      'Emotionsanalyse von Mitarbeitern waehrend Videokonferenzen',
      'Stimmungsanalyse von Schuelern ueber Mikrofone',
      'Stress-Detection bei Mitarbeitern ohne deren Einwilligung',
    ],
    exceptions: [
      'Medizinische Zwecke (z.B. Erkennung von Schmerzpatienten in Pflege)',
      'Sicherheitstechnische Gruende (z.B. Muedigkeitserkennung bei Piloten/Fahrern)',
    ],
    detectionKeywords: [
      'emotionserkennung', 'emotion recognition', 'aufmerksamkeit', 'stimmungsanalyse',
      'arbeitsplatz', 'schule', 'unterricht', 'webcam ueberwachung', 'stress detection',
    ],
  },
]

// =============================================================================
// Relevante Rechtsprechung
// =============================================================================

export const AI_CASE_LAW: CaseLawReference[] = [
  {
    id: 'CASE-01',
    court: 'LG Muenchen I',
    date: '2025-11-11',
    reference: '42 O 14139/24',
    title: 'Urheberrecht bei KI-generierten Inhalten (Memorisierung)',
    summary:
      'Das Gericht stellte fest, dass ein KI-System urheberrechtlich geschuetzte Songtexte ' +
      'inhaltsgleich reproduzierte, da diese im Modell „memorisiert" waren. Die KI-Modelle ' +
      'stellen daher Vervielfaeltigungsstuecke i.S.d. Art. 2 InfoSoc-RL, §16 Abs. 1,2 UrhG dar.',
    relevance:
      'Zeigt, dass der Einsatz von KI-Systemen, die urheberrechtlich geschuetzte Inhalte ' +
      'unautorisiert reproduzieren, urheberrechtlich unzulaessig ist. Relevant fuer alle ' +
      'KI-Module, die auf urheberrechtlich geschuetzten Trainingsdaten basieren.',
    sourceUrl: 'https://www.gesetze-bayern.de/Content/Document/Y-300-Z-GRURRS-B-2025-N-30204',
    licenseNote: 'Amtliches Werk nach §5 UrhG — kein Urheberrechtsschutz, frei verwendbar im RAG.',
  },
]

// =============================================================================
// Kategorisierung
// =============================================================================

export const PROHIBITION_CATEGORY_LABELS: Record<ProhibitionCategory, string> = {
  manipulation: 'Manipulation & Taeuschung',
  vulnerability_exploitation: 'Ausnutzung von Schwaechen',
  social_scoring: 'Social Scoring',
  biometric_surveillance: 'Biometrische Ueberwachung',
  predictive_policing: 'Predictive Policing',
  emotion_recognition: 'Emotionserkennung',
  biometric_categorization: 'Biometrische Kategorisierung',
  copyright_violation: 'Urheberrechtsverletzung',
}

export const SEVERITY_LABELS: Record<ProhibitionSeverity, string> = {
  absolute: 'Absolut verboten',
  conditional: 'Bedingt verboten (Ausnahmen moeglich)',
}

// =============================================================================
// Erkennung / Helper Functions
// =============================================================================

/**
 * Prueft, ob eine Beschreibung oder ein Name auf verbotene Praktiken hinweist.
 * Gibt alle potenziell zutreffenden Verbote zurueck, sortiert nach Relevanz.
 */
export function detectProhibitedPractices(
  description: string,
  name?: string
): { practice: ProhibitedAIPractice; matchCount: number; matchedKeywords: string[] }[] {
  const searchText = `${name || ''} ${description}`.toLowerCase()

  const results = PROHIBITED_AI_PRACTICES.map(practice => {
    const matchedKeywords = practice.detectionKeywords.filter(kw =>
      searchText.includes(kw.toLowerCase())
    )
    return {
      practice,
      matchCount: matchedKeywords.length,
      matchedKeywords,
    }
  }).filter(r => r.matchCount > 0)

  // Absolut verbotene zuerst, dann nach matchCount
  results.sort((a, b) => {
    if (a.practice.severity !== b.practice.severity) {
      return a.practice.severity === 'absolute' ? -1 : 1
    }
    return b.matchCount - a.matchCount
  })

  return results
}

/**
 * Gibt alle absolut verbotenen Praktiken zurueck.
 */
export function getAbsoluteProhibitions(): ProhibitedAIPractice[] {
  return PROHIBITED_AI_PRACTICES.filter(p => p.severity === 'absolute')
}

/**
 * Gibt alle bedingt verbotenen Praktiken zurueck.
 */
export function getConditionalProhibitions(): ProhibitedAIPractice[] {
  return PROHIBITED_AI_PRACTICES.filter(p => p.severity === 'conditional')
}

/**
 * Prueft, ob ein KI-Anwendungsfall Urheberrechts-Risiken birgt.
 * Basierend auf LG Muenchen I Urteil.
 */
export function hasCopyrightRisk(trainingDataDescription?: string): boolean {
  if (!trainingDataDescription) return false
  const keywords = [
    'urheberrecht', 'copyright', 'lizenz', 'geschuetzt', 'songtext',
    'buch', 'artikel', 'literatur', 'musik', 'film', 'bild',
    'web scraping', 'internet', 'crawl',
  ]
  const lower = trainingDataDescription.toLowerCase()
  return keywords.some(kw => lower.includes(kw))
}

/**
 * Generiert einen formatierten Warnungstext fuer ein erkanntes Verbot.
 */
export function formatProhibitionWarning(practice: ProhibitedAIPractice): string {
  const severity = practice.severity === 'absolute'
    ? 'ABSOLUT VERBOTEN'
    : 'BEDINGT VERBOTEN'

  let text = `⚠ ${severity}: ${practice.title}\n`
  text += `Rechtsgrundlage: ${practice.legalBasis}\n\n`
  text += `${practice.description}\n`

  if (practice.exceptions?.length) {
    text += `\nAusnahmen:\n`
    practice.exceptions.forEach(e => {
      text += `- ${e}\n`
    })
  }

  return text
}
