import { Router } from 'express';
import { authenticate, requirePermission } from '../middleware/auth.js';
import * as auditLogController from '../controllers/auditLog.controller.js';

const router = Router();

// Alle Routen erfordern Authentifizierung
router.use(authenticate);

// ACHTUNG Reihenfolge: Alle konkreten Pfade MÜSSEN vor der Parameter-Route
// '/:id' stehen, sonst schluckt diese sie und antwortet mit
// "Ungültige Audit-Log-ID". Genau so war GET /retention-policies unerreichbar
// (Pentest R166-04).

// Audit-Logs abrufen
router.get('/', requirePermission('audit:read'), auditLogController.getAuditLogs);

// Audit-Logs exportieren
//
// Verlangt `audit:export`, nicht `audit:read`. Die Berechtigung stand im
// Katalog und in der Rollenverwaltung, gatete aber NICHTS - jeder Leser
// konnte das vollstaendige Protokoll in einem Zug herausziehen.
//
// Das ist etwas anderes als Blaettern: Der Export liefert `changesBefore` und
// `changesAfter`, also die vollstaendigen Vorher/Nachher-Datensaetze, dazu
// `resourceLabel` mit Klartextnamen, IP-Adressen und User-Agents. Aufgefallen
// am Dienstkonto des Gegenbuchs: Es soll ausschliesslich Pruefwerte lesen -
// und konnte Personendaten exportieren.
router.get('/export', requirePermission('audit:export'), auditLogController.exportAuditLogs);

// Retention-Policies
router.get('/retention-policies', requirePermission('audit:admin'), auditLogController.getRetentionPolicies);
router.put('/retention-policies/:id', requirePermission('audit:admin'), auditLogController.updateRetentionPolicy);

// Kontrollwert für das externe Gegenbuch (nur lesend, ohne Geheimnisse)
router.get('/checkpoint', requirePermission('audit:read'), auditLogController.getCheckpoint);

// Audit-Logs für einen Kunden (DSGVO)
router.get('/customer/:customerId', requirePermission('audit:read'), auditLogController.getAuditLogsByCustomer);

// Hash-Ketten-Integrität prüfen
router.post('/verify', requirePermission('audit:read'), auditLogController.verifyIntegrity);

// Hash-Kette reparieren
router.post('/rehash', requirePermission('audit:admin'), auditLogController.rehashAll);

// Altbestand versiegeln (nicht destruktiv)
router.post('/seal-backlog', requirePermission('audit:admin'), auditLogController.sealBacklog);

// Retention-Cleanup manuell ausführen
router.post('/cleanup', requirePermission('audit:admin'), auditLogController.runRetentionCleanup);

// Einzelnes Audit-Log abrufen – als LETZTE GET-Route, siehe Hinweis oben
router.get('/:id', requirePermission('audit:read'), auditLogController.getAuditLogById);

export default router;
