<?php
/**
 * Einstellungs‑Änderungsprotokoll (admin/settings_log.php)
 * --------------------------------------------------------
 * Zeigt die letzten Einträge aus der Tabelle `settings_log`, die durch
 * logSettingChange() befüllt wird. Spalten laut tatsächlichem Schema:
 *   • id INT PK
 *   • user_id INT          – Admin, der geändert hat
 *   • setting_key VARCHAR  – Schlüssel der Einstellung
 *   • action VARCHAR       – z. B. "create_user", "update_setting" …
 *   • details TEXT NULL    – freie Beschreibung oder neuer Wert
 *   • created_at TIMESTAMP – Zeitstempel
 *
 * Mailresponder v9‑Vorgaben:
 *   • Ausführliche Kommentare in kritischen Blöcken
 *   • try/catch‑basierte Fehlerbehandlung
 *   • SQL‑Erfolgs‑/Fehler‑Logging
 *   • Protokolliere Seitenaufruf via logUserAction
 */

// --------------------------------------------------
// 1) Session initialisieren
// --------------------------------------------------
if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

// --------------------------------------------------
// 2) Abhängigkeiten laden
// --------------------------------------------------
require_once __DIR__ . '/../includes/init.php';
require_once __DIR__ . '/../auth/AuthController.php';

// --------------------------------------------------
// 3) Auth‑Check
// --------------------------------------------------
$auth = new AuthController();
if (!$auth->isLoggedIn()) {
    header('Location: ' . $adminLoginPath);
    exit;
}

// --------------------------------------------------
// 4) Variablen vorbereiten
// --------------------------------------------------
$title = 'Einstellungen‑Änderungen';
$db    = Database::getInstance();
$rows  = [];

// --------------------------------------------------
// 5) Datenbank‑Abruf (mit Logging & Fehlerbehandlung)
// --------------------------------------------------
try {
    // Letzte 100 Einstellungen‑Änderungen abrufen
    $stmt = $db->query(
        "SELECT id, action, setting_key, details, user_id, created_at
         FROM settings_log
         ORDER BY created_at DESC
         LIMIT 100"
    );
    $rows = $stmt->fetchAll();
    ErrorLogger::logSqlSuccess('settings_log: load latest entries | SQL: SELECT settings_log LIMIT 100 | params: []');

    // Admin‑Mails ermitteln, um IDs in lesbare E‑Mails umzuwandeln
    $adminMap = [];
    if ($rows) {
        $ids = array_unique(array_column($rows, 'user_id'));
        $place = implode(',', array_fill(0, count($ids), '?'));
        $stAdm = $db->prepare("SELECT id, email FROM admin_users WHERE id IN ($place)");
        $stAdm->execute($ids);
        $adminMap = $stAdm->fetchAll(PDO::FETCH_KEY_PAIR);
        ErrorLogger::logSqlSuccess('settings_log: load admin map | params: ' . json_encode($ids, JSON_UNESCAPED_UNICODE));
    }

    // Seitenaufruf loggen
    logUserAction($_SESSION['admin_id'] ?? 0, 'view_settings_log', 'IP: ' . ($_SERVER['REMOTE_ADDR'] ?? 'CLI'));

} catch (PDOException $e) {
    ErrorLogger::logSqlError('settings_log: load failed | SQL: SELECT settings_log/admin_users | error: ' . $e->getMessage());
    $rows = [];
}

// --------------------------------------------------
// 6) HTML‑Ausgabe
// --------------------------------------------------
ob_start();
?>
<div class="page-header">
  Nutzerprotokolle &raquo; Einstellungen‑Änderungen
</div>

<div class="page-contend">
  <table class="table table-sm table-hover table-bordered">
    <thead class="table-light">
      <tr>
        <th>ID</th>
        <th>Aktion</th>
        <th>Schlüssel</th>
        <th>Details</th>
        <th>Admin</th>
        <th>Zeitpunkt</th>
      </tr>
    </thead>
    <tbody>
      <?php if (!$rows): ?>
        <tr>
          <td colspan="6" class="text-center">Keine Änderungen gefunden.</td>
        </tr>
      <?php else: ?>
        <?php foreach ($rows as $row): ?>
          <tr>
            <td><?= $row['id'] ?></td>
            <td><?= htmlspecialchars($row['action']) ?></td>
            <td><?= htmlspecialchars($row['setting_key']) ?></td>
            <td><?= htmlspecialchars($row['details']) ?></td>
            <td><?= htmlspecialchars($adminMap[$row['user_id']] ?? ('ID ' . $row['user_id'])) ?></td>
            <td><?= $row['created_at'] ?></td>
          </tr>
        <?php endforeach; ?>
      <?php endif; ?>
    </tbody>
  </table>
</div>

<?php
// --------------------------------------------------
// 7) Template einbinden
// --------------------------------------------------
$pageContent = ob_get_clean();
include __DIR__ . '/template.php';



