/**
 * RAG & Legal Corpus Management - Static Data
 *
 * Core data constants: regulations, industries, thematic groups, etc.
 * Source URLs and licenses are in rag-sources.ts.
 */

import { REGULATIONS_IN_RAG } from './rag-constants'
import ragData from './rag-documents.json'
import type {
  Regulation,
  Industry,
  ThematicGroup,
  KeyIntersection,
  FutureOutlookItem,
  AdditionalRegulation,
  LegalBasisInfo,
  TabDef,
} from './types'

// Re-export source URLs, licenses and license labels from rag-sources.ts
export {
  REGULATION_SOURCES,
  REGULATION_LICENSES,
  LICENSE_LABELS,
} from './rag-sources'

// API uses local proxy route to klausur-service
export const API_PROXY = '/api/legal-corpus'
export const DSFA_API_PROXY = '/api/dsfa-corpus'

// Import documents and metadata from JSON
export const RAG_DOCUMENTS = ragData.documents
export const DOC_TYPES = ragData.doc_types
export const INDUSTRIES_LIST = ragData.industries

// Derive REGULATIONS from JSON (backwards compatible for regulations tab)
export const REGULATIONS: Regulation[] = RAG_DOCUMENTS.filter((d: any) => d.description).map((d: any) => ({
  code: d.code,
  name: d.name,
  fullName: d.full_name || d.name,
  type: d.doc_type,
  expected: 0,
  description: d.description || '',
  relevantFor: [] as string[],
  keyTopics: [] as string[],
  effectiveDate: d.effective_date || ''
}))

// Helper: Check if regulation is in RAG
export const isInRag = (code: string): boolean => code in REGULATIONS_IN_RAG

// Helper: Get known chunk count for a regulation
export const getKnownChunks = (code: string): number => REGULATIONS_IN_RAG[code]?.chunks || 0

// Known collection totals (updated: 2026-03-12)
export const COLLECTION_TOTALS = {
  bp_compliance_gesetze: 63567,
  bp_compliance_ce: 18183,
  bp_legal_templates: 7689,
  bp_compliance_datenschutz: 17459,
  bp_dsfa_corpus: 8666,
  bp_compliance_recht: 1425,
  bp_nibis_eh: 7996,
  total_legal: 81750,
  total_all: 124985,
}

export const TYPE_COLORS: Record<string, string> = {
  eu_regulation: 'bg-blue-100 text-blue-700',
  eu_directive: 'bg-purple-100 text-purple-700',
  de_law: 'bg-yellow-100 text-yellow-700',
  at_law: 'bg-red-100 text-red-700',
  ch_law: 'bg-rose-100 text-rose-700',
  bsi_standard: 'bg-green-100 text-green-700',
  national_law: 'bg-orange-100 text-orange-700',
  eu_guideline: 'bg-teal-100 text-teal-700',
}

export const TYPE_LABELS: Record<string, string> = {
  eu_regulation: 'EU-VO',
  eu_directive: 'EU-RL',
  de_law: 'DE-Gesetz',
  at_law: 'AT-Gesetz',
  ch_law: 'CH-Gesetz',
  bsi_standard: 'BSI',
  national_law: 'Nat. Gesetz',
  eu_guideline: 'EDPB-GL',
}

// Industries for backward compatibility
export const INDUSTRIES: Industry[] = INDUSTRIES_LIST.map((ind: any) => ({
  id: ind.id,
  name: ind.name,
  icon: ind.icon,
  description: ''
}))

// Derive industry map from document data
export const INDUSTRY_REGULATION_MAP: Record<string, string[]> = {}
for (const ind of INDUSTRIES_LIST) {
  INDUSTRY_REGULATION_MAP[ind.id] = RAG_DOCUMENTS
    .filter((d: any) => d.industries.includes(ind.id) || d.industries.includes('all'))
    .map((d: any) => d.code)
}

// Thematic groupings showing overlaps
export const THEMATIC_GROUPS: ThematicGroup[] = [
  {
    id: 'datenschutz',
    name: 'Datenschutz & Privacy',
    color: 'bg-blue-500',
    regulations: ['GDPR', 'EPRIVACY', 'TDDDG', 'SCC', 'DPF'],
    description: 'Schutz personenbezogener Daten, Einwilligung, Betroffenenrechte'
  },
  {
    id: 'cybersecurity',
    name: 'Cybersicherheit',
    color: 'bg-red-500',
    regulations: ['NIS2', 'EUCSA', 'CRA', 'BSI-TR-03161-1', 'BSI-TR-03161-2', 'BSI-TR-03161-3', 'DORA'],
    description: 'IT-Sicherheit, Risikomanagement, Incident Response'
  },
  {
    id: 'ai',
    name: 'Kuenstliche Intelligenz',
    color: 'bg-purple-500',
    regulations: ['AIACT', 'PLD', 'GPSR'],
    description: 'KI-Regulierung, Hochrisiko-Systeme, Haftung'
  },
  {
    id: 'digital-markets',
    name: 'Digitale Maerkte & Plattformen',
    color: 'bg-green-500',
    regulations: ['DSA', 'DGA', 'DATAACT', 'DSM'],
    description: 'Plattformregulierung, Datenzugang, Urheberrecht'
  },
  {
    id: 'product-safety',
    name: 'Produktsicherheit & Haftung',
    color: 'bg-orange-500',
    regulations: ['CRA', 'PLD', 'GPSR', 'EAA', 'MACHINERY_REG', 'BLUE_GUIDE'],
    description: 'Sicherheitsanforderungen, CE-Kennzeichnung, Maschinenverordnung, Barrierefreiheit'
  },
  {
    id: 'finance',
    name: 'Finanzmarktregulierung',
    color: 'bg-emerald-500',
    regulations: ['DORA', 'PSD2', 'AMLR', 'MiCA'],
    description: 'Zahlungsdienste, Krypto-Assets, Geldwaeschebekaempfung, digitale Resilienz'
  },
  {
    id: 'health',
    name: 'Gesundheitsdaten',
    color: 'bg-pink-500',
    regulations: ['EHDS', 'BSI-TR-03161-1', 'BSI-TR-03161-2', 'BSI-TR-03161-3'],
    description: 'Gesundheitsdatenraum, DiGA-Sicherheit, Patientenrechte'
  },
  {
    id: 'verbraucherschutz',
    name: 'Verbraucherschutz & E-Commerce',
    color: 'bg-amber-500',
    regulations: ['DE_PANGV', 'DE_VSBG', 'DE_PRODHAFTG', 'DE_UWG', 'DE_BFSG',
      'WARENKAUF_RL', 'KLAUSEL_RL', 'UNLAUTERE_PRAKTIKEN_RL', 'PREISANGABEN_RL',
      'OMNIBUS_RL', 'E_COMMERCE_RL', 'VERBRAUCHERRECHTE_RL', 'DIGITALE_INHALTE_RL'],
    description: 'Widerrufsrecht, Preisangaben, Fernabsatz, AGB-Recht, Barrierefreiheit'
  },
]

// Key overlaps and intersections
export const KEY_INTERSECTIONS: KeyIntersection[] = [
  {
    regulations: ['GDPR', 'AIACT'],
    topic: 'KI und personenbezogene Daten',
    description: 'Automatisierte Entscheidungen, Profiling, Erklaerbarkeit'
  },
  {
    regulations: ['NIS2', 'CRA'],
    topic: 'Cybersicherheit von Produkten',
    description: 'Sicherheitsanforderungen ueber den gesamten Lebenszyklus'
  },
  {
    regulations: ['AIACT', 'PLD'],
    topic: 'KI-Haftung',
    description: 'Wer haftet, wenn KI Schaeden verursacht?'
  },
  {
    regulations: ['DSA', 'GDPR'],
    topic: 'Plattform-Transparenz',
    description: 'Inhaltsmoderation und Datenschutz'
  },
  {
    regulations: ['DATAACT', 'GDPR'],
    topic: 'Datenzugang vs. Datenschutz',
    description: 'Balance zwischen Datenteilung und Privacy'
  },
  {
    regulations: ['CRA', 'GPSR'],
    topic: 'Digitale Produktsicherheit',
    description: 'Hardware mit Software-Komponenten'
  },
]

// Future outlook - proposed and discussed regulations
export const FUTURE_OUTLOOK: FutureOutlookItem[] = [
  {
    id: 'digital-omnibus',
    name: 'EU Digital Omnibus',
    status: 'proposed',
    statusLabel: 'Vorgeschlagen Nov 2025',
    expectedDate: '2026/2027',
    description: 'Umfassendes Vereinfachungspaket fuer AI Act, DSGVO und Cybersicherheit. Ziel: 5 Mrd. EUR Einsparung bei Verwaltungskosten.',
    keyChanges: [
      'AI Act: Verschiebung Hochrisiko-Pflichten um bis zu 16 Monate (bis Dez 2027)',
      'AI Act: Vereinfachte Dokumentation fuer KMU und Small Midcaps',
      'AI Act: EU-weite regulatorische Sandbox fuer KI-Tests',
      'DSGVO: Cookie-Banner-Reform - Berechtigtes Interesse statt nur Einwilligung',
      'DSGVO: Automatische Privacy-Signale via Browser statt Pop-ups',
      'Cybersecurity: Single Entry Point fuer Meldepflichten'
    ],
    affectedRegulations: ['AIACT', 'GDPR', 'NIS2', 'CRA', 'EUCSA'],
    source: 'https://digital-strategy.ec.europa.eu/en/library/digital-omnibus-ai-regulation-proposal'
  },
  {
    id: 'sustainability-omnibus',
    name: 'EU Nachhaltigkeits-Omnibus',
    status: 'agreed',
    statusLabel: 'Einigung Dez 2025',
    expectedDate: 'Q1 2026',
    description: 'Drastische Reduzierung der Nachhaltigkeits-Berichtspflichten. Anwendungsbereich wird stark eingeschraenkt.',
    keyChanges: [
      'CSRD: Nur noch Unternehmen >1.000 MA und >450 Mio EUR Umsatz berichtspflichtig',
      'CSRD: Betroffene Unternehmen sinken von 50.000 auf ca. 5.000 in der EU',
      'CSRD: Verschiebung Welle 2+3 um 2 Jahre (auf Geschaeftsjahr 2027)',
      'CSDDD: Nur noch Unternehmen >5.000 MA und >1,5 Mrd EUR Umsatz',
      'CSDDD: Sorgfaltspflichten nur noch fuer Tier-1-Lieferanten',
      'CSDDD: Pruefung nur noch alle 5 Jahre statt jaehrlich'
    ],
    affectedRegulations: ['CSRD', 'CSDDD', 'EU-Taxonomie'],
    source: 'https://kpmg-law.de/erste-omnibus-verordnung-soll-die-pflichten-der-csddd-csrd-und-eu-taxonomie-lockern/'
  },
  {
    id: 'eprivacy-withdrawal',
    name: 'ePrivacy-Verordnung',
    status: 'withdrawn',
    statusLabel: 'Zurueckgezogen Feb 2025',
    expectedDate: 'Unbekannt',
    description: 'Nach 9 Jahren Verhandlung hat die EU-Kommission den Vorschlag zurueckgezogen. Die ePrivacy-Richtlinie bleibt in Kraft, Cookie-Reform kommt via DSGVO/Digital Omnibus.',
    keyChanges: [
      'Urspruenglicher Vorschlag: Einheitliche EU-Cookie-Regeln',
      'Urspruenglicher Vorschlag: Strikte Tracking-Einwilligung',
      'Status: ePrivacy-Richtlinie + TDDDG bleiben gueltig',
      'Zukunft: Cookie-Reform wird Teil der DSGVO-Aenderungen'
    ],
    affectedRegulations: ['EPRIVACY', 'TDDDG', 'GDPR'],
    source: 'https://netzpolitik.org/2025/cookie-banner-und-online-tracking-eu-kommission-beerdigt-plaene-fuer-eprivacy-verordnung/'
  },
  {
    id: 'ai-liability',
    name: 'KI-Haftungsrichtlinie',
    status: 'pending',
    statusLabel: 'In Verhandlung',
    expectedDate: '2026',
    description: 'Ergaenzt den AI Act um zivilrechtliche Haftungsregeln. Erleichtert Geschaedigten die Beweisfuehrung bei KI-Schaeden.',
    keyChanges: [
      'Beweislasterleichterung bei KI-verursachten Schaeden',
      'Offenlegungspflichten fuer KI-Anbieter im Schadensfall',
      'Verknuepfung mit Produkthaftungsrichtlinie'
    ],
    affectedRegulations: ['AIACT', 'PLD'],
    source: 'https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:52022PC0496'
  },
]

// Potential future regulations (not yet integrated)
export const ADDITIONAL_REGULATIONS: AdditionalRegulation[] = [
  {
    code: 'PSD3',
    name: 'Payment Services Directive 3',
    fullName: 'Richtlinie zur dritten Zahlungsdiensterichtlinie (Entwurf)',
    type: 'eu_directive',
    status: 'proposed',
    effectiveDate: 'Voraussichtlich 2026',
    description: 'Modernisierung der Zahlungsdienste-Regulierung. Staerkerer Verbraucherschutz, Open Banking 2.0, Betrugsbekaempfung. Ersetzt dann PSD2.',
    relevantFor: ['Banken', 'Zahlungsdienstleister', 'Fintechs', 'E-Commerce'],
    celex: '52023PC0366',
    priority: 'medium'
  },
  {
    code: 'AMLD6',
    name: 'AML-Richtlinie 6',
    fullName: 'Richtlinie (EU) 2024/1640 - 6. Geldwaescherichtlinie',
    type: 'eu_directive',
    status: 'active',
    effectiveDate: '10. Juli 2027 (Umsetzung)',
    description: 'Ergaenzt die AML-Verordnung. Nationale Umsetzungsvorschriften, strafrechtliche Sanktionen, AMLA-Behoerde.',
    relevantFor: ['Banken', 'Krypto-Anbieter', 'Immobilienmakler', 'Gluecksspielanbieter'],
    celex: '32024L1640',
    priority: 'medium'
  },
  {
    code: 'FIDA',
    name: 'Financial Data Access',
    fullName: 'Verordnung zum Zugang zu Finanzdaten (Entwurf)',
    type: 'eu_regulation',
    status: 'proposed',
    effectiveDate: 'Voraussichtlich 2027',
    description: 'Open Finance Framework - erweitert PSD2-Open-Banking auf Versicherungen, Investitionen, Kredite.',
    relevantFor: ['Banken', 'Versicherungen', 'Fintechs', 'Datenaggregatoren'],
    celex: '52023PC0360',
    priority: 'medium'
  },
]

// Legal basis for using EUR-Lex content
export const LEGAL_BASIS_INFO: LegalBasisInfo = {
  title: 'Rechtliche Grundlage fuer RAG-Nutzung',
  summary: 'EU-Rechtstexte auf EUR-Lex sind oeffentliche amtliche Dokumente und duerfen frei verwendet werden.',
  details: [
    {
      aspect: 'EUR-Lex Dokumente',
      status: 'Erlaubt',
      explanation: 'Offizielle EU-Gesetzestexte, Richtlinien und Verordnungen sind gemeinfrei (Public Domain) und duerfen frei reproduziert und kommerziell genutzt werden.'
    },
    {
      aspect: 'Text-und-Data-Mining (TDM)',
      status: 'Erlaubt',
      explanation: 'Art. 4 der DSM-Richtlinie (2019/790) erlaubt TDM fuer kommerzielle Zwecke, sofern kein Opt-out des Rechteinhabers vorliegt. Fuer amtliche Texte gilt kein Opt-out.'
    },
    {
      aspect: 'AI Act Anforderungen',
      status: 'Beachten',
      explanation: 'Art. 53 AI Act verlangt von GPAI-Anbietern die Einhaltung des Urheberrechts. Fuer oeffentliche Rechtstexte unproblematisch.'
    },
    {
      aspect: 'BSI-Richtlinien',
      status: 'Erlaubt',
      explanation: 'BSI-Publikationen sind oeffentlich zugaenglich und duerfen fuer Compliance-Zwecke verwendet werden.'
    },
  ]
}

// Tab definitions
export const TABS: TabDef[] = [
  { id: 'overview', name: 'Uebersicht', icon: '📊' },
  { id: 'regulations', name: 'Regulierungen', icon: '📜' },
  { id: 'map', name: 'Landkarte', icon: '🗺️' },
  { id: 'search', name: 'Suche', icon: '🔍' },
  { id: 'chunks', name: 'Chunk-Browser', icon: '🧩' },
  { id: 'data', name: 'Daten', icon: '📁' },
  { id: 'ingestion', name: 'Ingestion', icon: '⚙️' },
  { id: 'pipeline', name: 'Pipeline', icon: '🔄' },
]
