/**
 * Architecture Data — Service Topology for BreakPilot Compliance
 *
 * Statische Definition aller 13 Services, ihrer Verbindungen,
 * DB-Tabellen, RAG-Collections und API-Endpunkte.
 */

// =============================================================================
// TYPES
// =============================================================================

export type ServiceLayer = 'frontend' | 'backend' | 'infrastructure' | 'data-sovereignty'

export interface ArchService {
  id: string
  name: string
  nameShort: string
  layer: ServiceLayer
  tech: string
  port: number | null
  url: string | null
  container: string
  description: string
  descriptionLong: string
  dbTables: string[]
  ragCollections: string[]
  apiEndpoints: string[]
  dependsOn: string[]
}

export interface ArchEdge {
  source: string
  target: string
  label?: string
}

// =============================================================================
// LAYER CONFIG
// =============================================================================

export const LAYERS: Record<ServiceLayer, {
  name: string
  color: string
  colorBg: string
  colorBorder: string
  colorText: string
  y: number
}> = {
  frontend: {
    name: 'Frontend',
    color: '#3b82f6',
    colorBg: '#eff6ff',
    colorBorder: '#3b82f6',
    colorText: '#1e40af',
    y: 0,
  },
  backend: {
    name: 'Backend APIs',
    color: '#8b5cf6',
    colorBg: '#f5f3ff',
    colorBorder: '#8b5cf6',
    colorText: '#5b21b6',
    y: 220,
  },
  infrastructure: {
    name: 'Infrastructure',
    color: '#64748b',
    colorBg: '#f8fafc',
    colorBorder: '#64748b',
    colorText: '#334155',
    y: 440,
  },
  'data-sovereignty': {
    name: 'Data Sovereignty',
    color: '#22c55e',
    colorBg: '#f0fdf4',
    colorBorder: '#22c55e',
    colorText: '#166534',
    y: 600,
  },
}

// =============================================================================
// SERVICES
// =============================================================================

export const ARCH_SERVICES: ArchService[] = [
  // ── Frontend ──────────────────────────────────────────────────────────────
  {
    id: 'admin-compliance',
    name: 'Admin Compliance Dashboard',
    nameShort: 'Admin',
    layer: 'frontend',
    tech: 'Next.js 15',
    port: 3007,
    url: 'https://macmini:3007',
    container: 'bp-compliance-admin',
    description: 'Haupt-Dashboard fuer alle 17+ DSGVO/AI-Act Compliance-Module. SDK-Sidebar, CommandBar, ComplianceAdvisor.',
    descriptionLong: 'Das Admin Compliance Dashboard ist die zentrale Benutzeroberflaeche fuer alle Compliance-Aktivitaeten. Es beinhaltet ueber 48 SDK-Module — von VVT und DSFA ueber Loeschfristen bis hin zu Schulungen und Audit-Reports. Saemtliche Backend-Aufrufe laufen ueber Next.js API-Routes als Reverse Proxy, sodass keine direkten Backend-URLs im Browser exponiert werden.',
    dbTables: [],
    ragCollections: [],
    apiEndpoints: [
      '/api/sdk/v1/compliance/[[...path]]',
      '/api/sdk/v1/training/[[...path]]',
      '/api/sdk/v1/rag/[[...path]]',
      '/api/admin/consent/[[...path]]',
    ],
    dependsOn: ['backend-compliance', 'ai-compliance-sdk', 'document-crawler'],
  },
  {
    id: 'developer-portal',
    name: 'Developer Portal',
    nameShort: 'Dev Portal',
    layer: 'frontend',
    tech: 'Next.js 15',
    port: 3006,
    url: 'https://macmini:3006',
    container: 'bp-compliance-developer-portal',
    description: 'API-Dokumentation und SDK-Referenz fuer Kunden-Integration.',
    descriptionLong: 'Das Developer Portal richtet sich an externe Entwickler, die das Compliance SDK in ihre eigenen Anwendungen integrieren moechten. Es dokumentiert alle REST-Endpunkte mit Request/Response-Beispielen, Authentifizierungs-Flows und SDK-Initialisierung. Das Portal laeuft als eigenstaendige Next.js-Instanz ohne Backend-Abhaengigkeiten.',
    dbTables: [],
    ragCollections: [],
    apiEndpoints: [],
    dependsOn: [],
  },
  {
    id: 'docs',
    name: 'SDK Dokumentation',
    nameShort: 'Docs',
    layer: 'frontend',
    tech: 'MkDocs / Nginx',
    port: 8011,
    url: 'https://macmini:8011',
    container: 'bp-compliance-docs',
    description: 'MkDocs-basierte technische Dokumentation. Statische Site via Nginx.',
    descriptionLong: 'Die SDK-Dokumentation wird aus Markdown-Quelldateien (docs-src/) mit MkDocs generiert und als statische HTML-Site ueber Nginx ausgeliefert. Sie enthaelt Architektur-Beschreibungen, API-Referenzen, Deployment-Anleitungen und Compliance-Leitfaeden. Updates werden durch einen Docker-Rebuild automatisch veroeffentlicht.',
    dbTables: [],
    ragCollections: [],
    apiEndpoints: [],
    dependsOn: [],
  },

  // ── Backend APIs ──────────────────────────────────────────────────────────
  {
    id: 'backend-compliance',
    name: 'Backend Compliance',
    nameShort: 'Backend',
    layer: 'backend',
    tech: 'Python / FastAPI',
    port: 8002,
    url: 'https://macmini:8002',
    container: 'bp-compliance-backend',
    description: 'Zentrale Compliance-API: DSGVO, DSR, GDPR, VVT, Loeschfristen, Obligations, Legal Documents, Consent.',
    descriptionLong: 'Das Backend Compliance ist das Herzsttueck der Datenverarbeitung. Es verwaltet 16+ DB-Tabellen fuer Risiken, Kontrollen, Nachweise, VVT-Eintraege, Loeschfristen, rechtliche Dokumente und Einwilligungen. Alle CRUD-Operationen laufen ueber SQLAlchemy mit Pydantic-Validierung. Sessions und Caching werden ueber Valkey (Redis-kompatibel) abgewickelt, um schnelle Antwortzeiten zu gewaehrleisten.',
    dbTables: [
      'compliance_risks', 'compliance_controls', 'compliance_requirements',
      'compliance_evidence', 'compliance_vvt', 'compliance_loeschfristen',
      'compliance_obligations', 'legal_documents', 'legal_templates',
      'einwilligungen_consents', 'consent_history',
      'security_backlog', 'quality_entries',
      'notfallplan_incidents', 'notfallplan_templates',
      'data_processing_agreement',
      'vendor_vendors', 'vendor_contracts', 'vendor_findings',
      'vendor_control_instances', 'compliance_templates',
      'compliance_isms_scope', 'compliance_isms_context', 'compliance_isms_policy',
      'compliance_security_objectives', 'compliance_soa',
      'compliance_audit_findings', 'compliance_corrective_actions',
      'compliance_management_reviews', 'compliance_internal_audits',
      'compliance_audit_trail', 'compliance_isms_readiness_checks',
    ],
    ragCollections: [],
    apiEndpoints: [
      'POST/GET /api/v1/compliance/risks',
      'POST/GET /api/v1/compliance/controls',
      'POST/GET /api/v1/compliance/requirements',
      'POST/GET /api/v1/compliance/evidence',
      'POST/GET /api/v1/dsr/requests',
      'POST/GET /api/v1/gdpr/exports',
      'POST/GET /api/v1/consent/admin',
      'CRUD /api/compliance/vvt',
      'CRUD /api/compliance/loeschfristen',
      'CRUD /api/compliance/obligations',
      'CRUD /api/sdk/v1/vendor-compliance/vendors',
      'CRUD /api/sdk/v1/vendor-compliance/contracts',
      'CRUD /api/sdk/v1/vendor-compliance/findings',
      'CRUD /api/sdk/v1/vendor-compliance/control-instances',
      'CRUD /api/isms/scope',
      'CRUD /api/isms/policies',
      'CRUD /api/isms/objectives',
      'CRUD /api/isms/soa',
      'CRUD /api/isms/findings',
      'CRUD /api/isms/capa',
      'CRUD /api/isms/management-reviews',
      'CRUD /api/isms/internal-audits',
      'GET /api/isms/overview',
      'POST /api/isms/readiness-check',
      'CRUD /api/compliance/legal-documents',
      'CRUD /api/compliance/legal-templates',
    ],
    dependsOn: ['postgresql', 'valkey'],
  },
  {
    id: 'ai-compliance-sdk',
    name: 'AI Compliance SDK',
    nameShort: 'AI SDK',
    layer: 'backend',
    tech: 'Go / Gin',
    port: 8093,
    url: 'https://macmini:8093',
    container: 'bp-compliance-ai-sdk',
    description: 'KI-konforme Compliance-Analyse: UCCA, Training, RAG-Suche, IACE, Portfolio, Roadmap, Workshop.',
    descriptionLong: 'Der AI Compliance SDK Service ist in Go geschrieben und bietet KI-gestuetzte Compliance-Analysen. Er fuehrt UCCA-Bewertungen (Use Case Compliance Assessments) durch, verwaltet Schulungsmodule mit Fortschrittstracking und durchsucht Rechtstexte per RAG (Retrieval Augmented Generation) ueber Qdrant. Als LLM wird primaer Ollama (qwen3.5:35b-a3b) lokal genutzt, mit Fallback auf Claude Sonnet ueber die Anthropic API.',
    dbTables: [
      'ai_assessments', 'ai_training_modules', 'ai_training_progress',
    ],
    ragCollections: [
      'bp_dsgvo', 'bp_ai_act', 'bp_bdsg', 'bp_ttdsg',
      'bp_compliance_templates',
    ],
    apiEndpoints: [
      'GET /regulations',
      'POST /search',
      'CRUD /assessments',
      'CRUD /training/modules',
      'GET /training/progress',
      'POST /analyze',
    ],
    dependsOn: ['qdrant', 'ollama', 'postgresql'],
  },
  {
    id: 'control-pipeline',
    name: 'Control Pipeline',
    nameShort: 'Pipeline',
    layer: 'backend',
    tech: 'Python / FastAPI',
    port: 8098,
    url: 'https://macmini:8098',
    container: 'bp-core-control-pipeline',
    description: 'RAG-zu-Controls Pipeline: Control Generation, Pass 0a/0b, Ontology, Dedup, Dependency Engine, Applicability.',
    descriptionLong: 'Die Control Pipeline ist das Herzsttueck der automatisierten Compliance-Control-Generierung. Sie verarbeitet ~105.000 RAG-Chunks aus EU/DE-Regulierungen in 6 Phasen: (1) RAG Ingestion, (2) 7-Stufen Control Generation (Lizenz-Gate + Claude LLM), (3) Pass 0a Obligation Extraction (~181k Obligations), (4) Pass 0b Atomic Composition (MCP-taugliche Controls mit assertion/pass_criteria/fail_criteria), (5) Embedding-basierte Deduplizierung mit LLM-Verifikation, (6) Dependency Engine (5 Typen: supersedes, prerequisite, compensating_control, scope_exclusion, conditional_requirement) mit automatischer Generierung via Ontology, Pattern-Regeln und Domain Packs (DSGVO, AI Act, CRA, Security, Arbeitsrecht). 126+ Tests, alle bestanden.',
    dbTables: [
      'canonical_controls', 'obligation_candidates', 'control_parent_links',
      'control_dependencies', 'control_evaluation_results',
      'canonical_processed_chunks', 'canonical_generation_jobs',
      'control_dedup_reviews', 'control_patterns',
    ],
    ragCollections: [
      'bp_compliance_gesetze', 'bp_compliance_datenschutz',
      'bp_compliance_ce', 'bp_dsfa_corpus', 'bp_legal_templates',
    ],
    apiEndpoints: [
      'POST /v1/canonical/generate',
      'GET /v1/canonical/controls',
      'POST /v1/canonical/controls/applicable',
      'POST /v1/canonical/generate/submit-pass0b',
      'POST /v1/canonical/generate/process-batch',
      'GET /v1/canonical/generate/quality-metrics',
      'POST /v1/dependencies/generate',
      'POST /v1/dependencies/evaluate',
      'GET /v1/dependencies/graph',
      'POST /v1/document-compliance/required',
    ],
    dependsOn: ['postgresql', 'qdrant', 'ollama'],
  },
  {
    id: 'compliance-tts',
    name: 'Compliance TTS',
    nameShort: 'TTS',
    layer: 'backend',
    tech: 'Piper TTS + FFmpeg',
    port: 8095,
    url: null,
    container: 'bp-compliance-tts',
    description: 'Text-to-Speech fuer Schulungsvideos. Piper TTS (de_DE-thorsten-high), Video-Generierung, MinIO-Storage.',
    descriptionLong: 'Der TTS-Service wandelt Schulungstexte in natuerlich klingende Sprache um und generiert daraus komplette Schulungsvideos. Er nutzt das deutsche Piper-TTS-Modell (thorsten-high) fuer die Sprachsynthese und FFmpeg fuer die Video-Komposition. Die fertigen Audio- und Videodateien werden in MinIO (S3-kompatibel) gespeichert und koennen ueber das Training-Modul abgerufen werden.',
    dbTables: [],
    ragCollections: [],
    apiEndpoints: [
      'POST /synthesize',
      'POST /generate-video',
    ],
    dependsOn: ['minio'],
  },

  // ── Infrastructure ────────────────────────────────────────────────────────
  {
    id: 'postgresql',
    name: 'PostgreSQL',
    nameShort: 'PostgreSQL',
    layer: 'infrastructure',
    tech: 'PostgreSQL 17',
    port: 54321,
    url: null,
    container: '46.225.100.82:54321 (extern)',
    description: 'Externe PostgreSQL-Instanz (Hetzner/meghshakka). Schemas: compliance (51 Tabellen) + public (33 compliance_*-Tabellen). Migriert 2026-03-06.',
    descriptionLong: 'Die Compliance-Daten liegen seit 2026-03-06 auf einer dedizierten externen PostgreSQL 17-Instanz bei Hetzner (meghshakka, 46.225.100.82:54321). Das compliance-Schema umfasst 51 Tabellen fuer Risiken, Kontrollen, VVT, DSFA, Einwilligungen, Loeschfristen u.v.m. Weitere 33 compliance_*-Tabellen befinden sich im public-Schema (Tenants, Namespaces, LLM-Policies, Legal Documents etc.). Die Verbindung ist TLS-verschluesselt (sslmode=require). Die lokale bp-core-postgres auf dem Mac Mini wird exklusiv von breakpilot-lehrer (NIBIS-Daten) genutzt.',
    dbTables: [],
    ragCollections: [],
    apiEndpoints: [],
    dependsOn: [],
  },
  {
    id: 'valkey',
    name: 'Valkey (Redis)',
    nameShort: 'Valkey',
    layer: 'infrastructure',
    tech: 'Valkey 7',
    port: 6379,
    url: null,
    container: 'bp-core-valkey',
    description: 'Session-Cache und Pub/Sub. Redis-kompatibel, von breakpilot-core bereitgestellt.',
    descriptionLong: 'Valkey ist ein Redis-kompatibler In-Memory-Store, der von breakpilot-core bereitgestellt wird. Er speichert Session-Daten, kurzlebige Caches und dient als Pub/Sub-Broker fuer Event-basierte Kommunikation zwischen Services. Durch die Redis-Kompatibilitaet koennen bestehende Redis-Clients und -Bibliotheken ohne Aenderungen verwendet werden.',
    dbTables: [],
    ragCollections: [],
    apiEndpoints: [],
    dependsOn: [],
  },
  {
    id: 'qdrant',
    name: 'Qdrant',
    nameShort: 'Qdrant',
    layer: 'infrastructure',
    tech: 'Qdrant Cloud',
    port: 443,
    url: 'https://qdrant-dev.breakpilot.ai',
    container: 'qdrant-dev.breakpilot.ai (extern)',
    description: 'Externe Vektor-Datenbank (Hetzner/meghshakka). RAG-Compliance-Suche. Collections: DSGVO, AI Act, BDSG, TTDSG. Migriert 2026-03-06.',
    descriptionLong: 'Qdrant laeuft seit 2026-03-06 als externe Instanz auf qdrant-dev.breakpilot.ai (Hetzner/meghshakka). Es speichert Vektorembeddings von Rechtstexten und Compliance-Dokumenten in thematischen Collections. Der AI Compliance SDK verbindet sich per HTTPS mit API-Key-Authentifizierung. Durch die externe Instanz skaliert der Vektorspeicher unabhaengig vom Mac Mini.',
    dbTables: [],
    ragCollections: [
      'bp_dsgvo', 'bp_ai_act', 'bp_bdsg', 'bp_ttdsg',
      'bp_compliance_templates',
    ],
    apiEndpoints: [],
    dependsOn: [],
  },
  {
    id: 'minio',
    name: 'Hetzner Object Storage',
    nameShort: 'Object Storage',
    layer: 'infrastructure',
    tech: 'S3-kompatibel',
    port: 443,
    url: 'https://nbg1.your-objectstorage.com',
    container: 'nbg1.your-objectstorage.com (extern)',
    description: 'Externer S3-kompatibler Object Storage (Hetzner Nuernberg). TTS-Audio, generierte Videos. Migriert 2026-03-06.',
    descriptionLong: 'Der Object Storage laeuft seit 2026-03-06 auf dem Hetzner-Standort Nuernberg (nbg1.your-objectstorage.com) und ist vollstaendig S3-kompatibel. Der Compliance TTS-Service speichert dort generierte Schulungsvideos und Audio-Dateien. Die Verbindung ist TLS-verschluesselt (MINIO_SECURE=true). Die lokale bp-core-minio-Instanz auf dem Mac Mini wird nicht mehr vom Compliance-Stack genutzt.',
    dbTables: [],
    ragCollections: [],
    apiEndpoints: [],
    dependsOn: [],
  },
  {
    id: 'ollama',
    name: 'Ollama',
    nameShort: 'Ollama',
    layer: 'infrastructure',
    tech: 'Ollama',
    port: 11434,
    url: null,
    container: 'bp-core-ollama',
    description: 'Lokaler LLM-Server. Modell: qwen3.5:35b-a3b. Fallback: Claude Sonnet via Anthropic API.',
    descriptionLong: 'Ollama hostet ein lokales Large Language Model (qwen3.5:35b-a3b) fuer Compliance-Analysen, Textgenerierung und UCCA-Bewertungen. Durch die lokale Ausfuehrung bleiben alle Daten im eigenen Netzwerk — ein zentraler Vorteil fuer DSGVO-Konformitaet. Ist das lokale Modell nicht verfuegbar oder die Aufgabe zu komplex, wird automatisch auf Claude Sonnet ueber die Anthropic API zurueckgegriffen.',
    dbTables: [],
    ragCollections: [],
    apiEndpoints: [],
    dependsOn: [],
  },

  // ── Data Sovereignty ──────────────────────────────────────────────────────
  {
    id: 'dsms',
    name: 'DSMS (IPFS + Gateway)',
    nameShort: 'DSMS',
    layer: 'data-sovereignty',
    tech: 'Kubo + Node.js',
    port: 8082,
    url: null,
    container: 'bp-compliance-dsms-node / dsms-gateway',
    description: 'Data Sovereignty Management System. IPFS-Node (Kubo) + Gateway fuer dezentrale Dokument-Archivierung.',
    descriptionLong: 'Das DSMS (Data Sovereignty Management System) besteht aus einem IPFS-Node (Kubo) und einem Node.js-Gateway. Es ermoeglicht die dezentrale, manipulationssichere Archivierung von Compliance-Dokumenten ueber das InterPlanetary File System. Jedes archivierte Dokument erhaelt einen Content Identifier (CID), der als kryptografischer Nachweis der Dokumentenintegritaet dient.',
    dbTables: [],
    ragCollections: [],
    apiEndpoints: [
      'POST /pin',
      'GET /retrieve/:cid',
      'GET /status',
    ],
    dependsOn: [],
  },
]

// =============================================================================
// EDGES (Datenfluss-Verbindungen)
// =============================================================================

export const ARCH_EDGES: ArchEdge[] = [
  // Frontend → Backend
  { source: 'admin-compliance', target: 'backend-compliance', label: 'REST API' },
  { source: 'admin-compliance', target: 'ai-compliance-sdk', label: 'REST API' },
  { source: 'admin-compliance', target: 'control-pipeline', label: 'REST API' },

  // Backend → Infrastructure
  { source: 'backend-compliance', target: 'postgresql', label: 'SQLAlchemy' },
  { source: 'backend-compliance', target: 'valkey', label: 'Sessions' },
  { source: 'ai-compliance-sdk', target: 'qdrant', label: 'Vektor-Suche' },
  { source: 'ai-compliance-sdk', target: 'ollama', label: 'LLM Inference' },
  { source: 'ai-compliance-sdk', target: 'postgresql', label: 'GORM' },
  { source: 'compliance-tts', target: 'minio', label: 'Audio/Video' },
  { source: 'control-pipeline', target: 'postgresql', label: 'SQLAlchemy' },
  { source: 'control-pipeline', target: 'qdrant', label: 'Embedding + Dedup' },
  { source: 'control-pipeline', target: 'ollama', label: 'LLM Dedup (qwen3.5)' },
]

// =============================================================================
// HELPERS
// =============================================================================

export function getServiceById(id: string): ArchService | undefined {
  return ARCH_SERVICES.find(s => s.id === id)
}

export function getServicesByLayer(layer: ServiceLayer): ArchService[] {
  return ARCH_SERVICES.filter(s => s.layer === layer)
}

export function getAllDbTables(): string[] {
  const tables = new Set<string>()
  ARCH_SERVICES.forEach(s => s.dbTables.forEach(t => tables.add(t)))
  return Array.from(tables)
}

export function getAllRagCollections(): string[] {
  const collections = new Set<string>()
  ARCH_SERVICES.forEach(s => s.ragCollections.forEach(c => collections.add(c)))
  return Array.from(collections)
}
