/**
 * Section 18: BQAS Lokaler Scheduler (QA-System)
 * Subsections: 18.1-18.5
 */

import { Table } from '../Table'
import { CodeBlock } from '../CodeBlock'

export function BQASScheduler() {
  return (
    <section id="section-18" className="mb-10 scroll-mt-32">
      <h2 className="text-2xl font-bold text-slate-800 mb-6 pb-2 border-b border-slate-200">
        18. BQAS Lokaler Scheduler (QA-System)
      </h2>

      <div id="section-18-1" className="mb-6 scroll-mt-32">
        <h3 className="text-xl font-semibold text-slate-700 mb-3">18.1 GitHub Actions Alternative</h3>
        <p className="text-slate-600 mb-4">
          Das BQAS (Breakpilot Quality Assurance System) nutzt einen <strong>lokalen Scheduler</strong> anstelle von GitHub Actions.
          Dies gewährleistet, dass <strong>keine Testdaten oder Ergebnisse</strong> an externe Cloud-Dienste übertragen werden.
        </p>
        <Table
          headers={['Feature', 'GitHub Actions', 'Lokaler Scheduler', 'DSGVO-Relevanz']}
          rows={[
            ['Tägliche Tests', 'schedule: cron', 'macOS launchd', 'Keine Datenübertragung'],
            ['Push-Tests', 'on: push (Cloud)', 'Git post-commit Hook (lokal)', 'Keine Datenübertragung'],
            ['PR-Tests', 'on: pull_request', 'Nicht verfügbar', '-'],
            ['Benachrichtigungen', 'GitHub Issues (US)', 'Desktop/Slack/Email', 'Konfigurierbar'],
            ['Datenverarbeitung', 'GitHub Server (US)', '100% lokal', 'DSGVO-konform'],
          ]}
        />
      </div>

      <div id="section-18-2" className="mb-6 scroll-mt-32">
        <h3 className="text-xl font-semibold text-slate-700 mb-3">18.2 Datenschutz-Vorteile</h3>
        <div className="bg-green-50 border border-green-200 rounded-lg p-4 mb-4">
          <p className="text-green-800 font-medium">
            <strong>DSGVO-Konformität:</strong> Der lokale Scheduler verarbeitet alle Testdaten ausschließlich auf dem schuleigenen Mac Mini.
            Es erfolgt keine Übertragung von Schülerdaten, Testergebnissen oder Modell-Outputs an externe Server.
          </p>
        </div>
        <Table
          headers={['Aspekt', 'Umsetzung']}
          rows={[
            ['Verarbeitungsort', '100% auf lokalem Mac Mini'],
            ['Drittlandübermittlung', 'Keine'],
            ['Cloud-Abhängigkeit', 'Keine - vollständig offline-fähig'],
            ['Testdaten', 'Verbleiben lokal, keine Synchronisation'],
            ['Logs', '/var/log/bqas/ - lokal, ohne PII'],
          ]}
        />
      </div>

      <div id="section-18-3" className="mb-6 scroll-mt-32">
        <h3 className="text-xl font-semibold text-slate-700 mb-3">18.3 Komponenten</h3>
        <p className="text-slate-600 mb-4">Der lokale Scheduler besteht aus folgenden Komponenten:</p>
        <Table
          headers={['Komponente', 'Beschreibung', 'Datenschutz']}
          rows={[
            ['run_bqas.sh', 'Hauptscript für Test-Ausführung', 'Keine Netzwerk-Calls außer lokalem API'],
            ['launchd Job', 'macOS-nativer Scheduler (07:00 täglich)', 'System-Level, keine Cloud'],
            ['Git Hook', 'post-commit für automatische Quick-Tests', 'Rein lokal'],
            ['Notifier', 'Benachrichtigungsmodul (Python)', 'Desktop lokal, Slack/Email optional'],
            ['LLM Judge', 'Qwen2.5-32B via lokalem Ollama', 'Keine externe API'],
            ['RAG Judge', 'Korrektur-Evaluierung lokal', 'Keine externe API'],
          ]}
        />
        <CodeBlock>{`# Dateistruktur
voice-service/
├── scripts/
│   ├── run_bqas.sh              # Haupt-Runner
│   ├── install_bqas_scheduler.sh # Installation
│   ├── com.breakpilot.bqas.plist # launchd Template
│   └── post-commit.hook         # Git Hook
│
└── bqas/
    ├── judge.py                 # LLM Judge
    ├── rag_judge.py             # RAG Judge
    ├── notifier.py              # Benachrichtigungen
    └── regression_tracker.py    # Score-Historie`}</CodeBlock>
      </div>

      <div id="section-18-4" className="mb-6 scroll-mt-32">
        <h3 className="text-xl font-semibold text-slate-700 mb-3">18.4 Datenverarbeitung</h3>
        <p className="text-slate-600 mb-4">Folgende Daten werden während der Test-Ausführung verarbeitet:</p>
        <Table
          headers={['Datentyp', 'Verarbeitung', 'Speicherung', 'Löschung']}
          rows={[
            ['Test-Inputs (Golden Suite)', 'Lokal via pytest', 'Im Speicher während Test', 'Nach Test-Ende'],
            ['LLM-Antworten', 'Lokales Ollama', 'Temporär im Speicher', 'Nach Bewertung'],
            ['Test-Ergebnisse', 'SQLite DB', 'bqas_history.db (lokal)', 'Nach Konfiguration'],
            ['Logs', 'Dateisystem', '/var/log/bqas/', 'Manuelle Rotation'],
            ['Benachrichtigungen', 'Log + Optional Slack/Email', 'notifications.log', 'Manuelle Rotation'],
          ]}
        />
        <div className="bg-amber-50 border border-amber-200 rounded-lg p-4 mt-4">
          <p className="text-amber-800">
            <strong>Wichtig:</strong> Die Test-Inputs (Golden Suite YAML-Dateien) enthalten <strong>keine echten Schülerdaten</strong>,
            sondern ausschließlich synthetische Beispiele zur Qualitätssicherung der Intent-Erkennung und RAG-Funktionalität.
          </p>
        </div>
      </div>

      <div id="section-18-5" className="mb-6 scroll-mt-32">
        <h3 className="text-xl font-semibold text-slate-700 mb-3">18.5 Benachrichtigungen</h3>
        <p className="text-slate-600 mb-4">Das Notifier-Modul unterstützt verschiedene Benachrichtigungskanäle:</p>
        <Table
          headers={['Kanal', 'Standard', 'Konfiguration', 'Datenschutz-Hinweis']}
          rows={[
            ['Desktop (macOS)', 'Aktiviert', 'BQAS_NOTIFY_DESKTOP=true', 'Rein lokal, keine Übertragung'],
            ['Log-Datei', 'Immer', '/var/log/bqas/notifications.log', 'Lokal, nur Metadaten'],
            ['Slack Webhook', 'Deaktiviert', 'BQAS_NOTIFY_SLACK=true', 'Externe Übertragung - nur Status, keine PII'],
            ['E-Mail', 'Deaktiviert', 'BQAS_NOTIFY_EMAIL=true', 'Via lokalen Mailserver möglich'],
          ]}
        />
        <p className="text-slate-600 mt-4 mb-2"><strong>Empfohlene Konfiguration für maximale Datenschutz-Konformität:</strong></p>
        <CodeBlock>{`# Nur lokale Benachrichtigungen (Standard)
BQAS_NOTIFY_DESKTOP=true
BQAS_NOTIFY_SLACK=false
BQAS_NOTIFY_EMAIL=false

# Benachrichtigungs-Inhalt (ohne PII):
# - Status: success/failure/warning
# - Anzahl bestandener/fehlgeschlagener Tests
# - Test-IDs (keine Schülernamen oder Inhalte)`}</CodeBlock>
      </div>
    </section>
  )
}
