/**
 * Shared Types & Constants for AI Modules
 *
 * Diese Datei enthält gemeinsame Typen und Konstanten für die drei AI-Module:
 * - OCR-Labeling: Ground Truth für Handschrift-OCR
 * - RAG Pipeline: Dokument-Indexierung (NiBiS, EH, Schulordnungen)
 * - Daten & RAG: Vektor-Suche & Collection-Mapping
 *
 * Alle Module kommunizieren mit dem klausur-service auf Port 8086.
 */

// =============================================================================
// Qdrant Collection IDs
// =============================================================================

/**
 * Gemeinsame Qdrant Collection-IDs für das RAG-System
 */
export const QDRANT_COLLECTIONS = {
  /** Offizielle NiBiS Erwartungshorizonte */
  NIBIS_EH: 'bp_nibis_eh',
  /** Benutzerdefinierte/eigene Erwartungshorizonte */
  CUSTOM_EH: 'bp_eh',
  /** Schulordnungen aller Bundesländer */
  SCHULORDNUNGEN: 'bp_schulordnungen',
  /** Rechtskorpus (DSGVO, AI Act, BSI Standards, etc.) */
  LEGAL_CORPUS: 'bp_legal_corpus',
} as const

export type QdrantCollectionId = typeof QDRANT_COLLECTIONS[keyof typeof QDRANT_COLLECTIONS]

// =============================================================================
// Shared Status Types
// =============================================================================

/**
 * Gemeinsamer Verarbeitungsstatus für alle Module
 */
export type ProcessingStatus = 'pending' | 'processing' | 'completed' | 'failed'

/**
 * Status für Indexierungs-Jobs
 */
export type IndexingJobStatus =
  | 'queued'
  | 'preparing'
  | 'processing'
  | 'validating'
  | 'completed'
  | 'failed'
  | 'paused'

/**
 * Status für OCR-Labeling Items
 */
export type OCRLabelingStatus = 'pending' | 'confirmed' | 'corrected' | 'skipped'

// =============================================================================
// Cross-Module Navigation
// =============================================================================

/**
 * Link-Definition für AI-Modul-Navigation
 */
export interface AIModuleLink {
  /** Eindeutige ID des Moduls */
  id: string
  /** Anzeigename */
  name: string
  /** Navigation href */
  href: string
  /** Kurzbeschreibung */
  description: string
  /** Optional: Icon-Name oder Emoji */
  icon?: string
  /** Optional: Farbe für Hervorhebung */
  color?: string
}

/**
 * KI-Daten-Pipeline Module
 * Diese Module bilden eine zusammenhaengende Pipeline mit Datenfluss.
 * Datenfluss: Magic Help ⟷ OCR-Labeling → RAG Pipeline → Daten & RAG
 */
export const AI_PIPELINE_MODULES: AIModuleLink[] = [
  {
    id: 'magic-help',
    name: 'Magic Help',
    href: '/ai/magic-help',
    description: 'TrOCR Testing & LoRA Fine-Tuning',
    icon: '✨',
  },
  {
    id: 'ocr-labeling',
    name: 'OCR-Labeling',
    href: '/ai/ocr-labeling',
    description: 'Handschrift-Training & Ground Truth Erfassung',
    icon: '🏷️',
  },
  {
    id: 'rag-pipeline',
    name: 'RAG Pipeline',
    href: '/ai/rag-pipeline',
    description: 'Dokument-Indexierung & Vektor-Embedding',
    icon: '🔄',
  },
  {
    id: 'rag',
    name: 'Daten & RAG',
    href: '/ai/rag',
    description: 'Vektor-Suche & Collection-Management',
    icon: '🔍',
  },
]

/**
 * KI-Werkzeuge Module
 * Standalone-Tools fuer Entwicklung, QA und Evaluation.
 * Kein direkter Datenfluss zur Pipeline.
 */
export const AI_TOOLS_MODULES: AIModuleLink[] = [
  {
    id: 'test-quality',
    name: 'Test Quality (BQAS)',
    href: '/ai/test-quality',
    description: 'Golden Suite & Synthetic Tests',
    icon: '🧪',
  },
]

/**
 * Alle AI-Module für Cross-Navigation (Legacy - fuer Abwaertskompatibilitaet)
 * @deprecated Nutze AI_PIPELINE_MODULES oder AI_TOOLS_MODULES
 */
export const AI_MODULES: AIModuleLink[] = [
  ...AI_PIPELINE_MODULES,
  ...AI_TOOLS_MODULES,
]

/**
 * Verwandte Module für jedes AI-Modul
 */
export const AI_MODULE_RELATIONS: Record<string, AIModuleLink[]> = {
  // KI-Daten-Pipeline Relations
  'magic-help': [
    {
      id: 'ocr-labeling',
      name: 'OCR-Labeling',
      href: '/ai/ocr-labeling',
      description: 'Ground Truth erstellen',
    },
    {
      id: 'rag-pipeline',
      name: 'RAG Pipeline',
      href: '/ai/rag-pipeline',
      description: 'Erkannte Texte indexieren',
    },
  ],
  'ocr-labeling': [
    {
      id: 'magic-help',
      name: 'Magic Help',
      href: '/ai/magic-help',
      description: 'TrOCR testen & fine-tunen',
    },
    {
      id: 'rag-pipeline',
      name: 'RAG Pipeline',
      href: '/ai/rag-pipeline',
      description: 'Trainierte Daten indexieren',
    },
    {
      id: 'klausur-korrektur',
      name: 'Klausur-Korrektur',
      href: '/ai/klausur-korrektur',
      description: 'OCR in Aktion',
    },
  ],
  'rag-pipeline': [
    {
      id: 'ocr-labeling',
      name: 'OCR-Labeling',
      href: '/ai/ocr-labeling',
      description: 'Ground Truth erstellen',
    },
    {
      id: 'rag',
      name: 'Daten & RAG',
      href: '/ai/rag',
      description: 'Indexierte Daten durchsuchen',
    },
  ],
  rag: [
    {
      id: 'rag-pipeline',
      name: 'RAG Pipeline',
      href: '/ai/rag-pipeline',
      description: 'Neue Dokumente indexieren',
    },
    {
      id: 'klausur-korrektur',
      name: 'Klausur-Korrektur',
      href: '/ai/klausur-korrektur',
      description: 'RAG-Suche nutzen',
    },
  ],
  // KI-Werkzeuge Relations (Standalone-Tools)
  'test-quality': [
    {
      id: 'klausur-korrektur',
      name: 'Klausur-Korrektur',
      href: '/ai/klausur-korrektur',
      description: 'BQAS in Aktion',
    },
  ],
}

// =============================================================================
// Data Flow Types
// =============================================================================

/**
 * Datenfluss-Verbindung zwischen Modulen
 */
export interface DataFlowConnection {
  from: string
  to: string
  label: string
  description: string
}

/**
 * Definiert den Datenfluss zwischen den AI-Modulen
 *
 * Magic Help ⟷ OCR-Labeling: Bidirektionaler Austausch (LoRA + Ground Truth)
 * OCR-Labeling → RAG Pipeline: Ground Truth für Training
 * RAG Pipeline → Daten & RAG: Embeddings für Vektor-Suche
 * Daten & RAG → Klausur-Korrektur: RAG-Suche für Bewertung
 */
export const DATA_FLOW_CONNECTIONS: DataFlowConnection[] = [
  {
    from: 'magic-help',
    to: 'ocr-labeling',
    label: 'LoRA Model',
    description: 'Verbessertes TrOCR-Modell für OCR-Labeling',
  },
  {
    from: 'ocr-labeling',
    to: 'magic-help',
    label: 'TrOCR Export',
    description: 'Ground Truth Daten im TrOCR-Format für Fine-Tuning',
  },
  {
    from: 'ocr-labeling',
    to: 'rag-pipeline',
    label: 'Ground Truth',
    description: 'Gelabelte Handschriftproben für OCR-Training',
  },
  {
    from: 'rag-pipeline',
    to: 'rag',
    label: 'Embeddings',
    description: 'Vektor-Embeddings indexierter Dokumente',
  },
  {
    from: 'rag',
    to: 'klausur-korrektur',
    label: 'RAG-Suche',
    description: 'Semantische Suche für Erwartungshorizonte',
  },
]

// =============================================================================
// API Configuration
// =============================================================================

/**
 * Backend-Endpunkte für die AI-Module
 */
export const AI_API_ENDPOINTS = {
  /** OCR-Labeling Endpoints */
  OCR_LABELING: {
    SESSIONS: '/api/v1/ocr-label/sessions',
    QUEUE: '/api/v1/ocr-label/queue',
    CONFIRM: '/api/v1/ocr-label/confirm',
    CORRECT: '/api/v1/ocr-label/correct',
    SKIP: '/api/v1/ocr-label/skip',
    STATS: '/api/v1/ocr-label/stats',
    EXPORT: '/api/v1/ocr-label/export',
  },
  /** RAG Pipeline Endpoints */
  RAG_PIPELINE: {
    JOBS: '/api/ai/rag-pipeline?action=jobs',
    DATASET_STATS: '/api/ai/rag-pipeline?action=dataset-stats',
    CREATE_JOB: '/api/ai/rag-pipeline?action=create-job',
  },
  /** Legal Corpus / RAG Endpoints */
  LEGAL_CORPUS: {
    STATUS: '/api/legal-corpus/status',
    SEARCH: '/api/legal-corpus/search',
    INGEST: '/api/legal-corpus/ingest',
  },
} as const

// =============================================================================
// Architecture Documentation
// =============================================================================

/**
 * Architektur-Information für Dokumentationszwecke
 */
export const AI_ARCHITECTURE = {
  services: [
    { name: 'klausur-service', port: 8086, language: 'Python', description: 'Haupt-Backend für alle AI-Module' },
    { name: 'embedding-service', port: 8087, language: 'Python', description: 'Vektor-Embedding Generation' },
  ],
  databases: [
    { name: 'Qdrant', type: 'Vector', description: 'Vektor-Datenbank für RAG' },
    { name: 'PostgreSQL', type: 'Relational', description: 'Metadaten und Session-Storage' },
    { name: 'MinIO', type: 'Object', description: 'Bild- und Dokumenten-Storage' },
  ],
  embeddingModel: {
    name: 'text-embedding-3-small',
    dimensions: 1536,
    provider: 'OpenAI',
  },
  chunkConfig: {
    size: 1000,
    overlap: 200,
    metric: 'COSINE',
  },
}
