<?php
// admin/dashboard.php
// --------------------------------------------------------------
// Zentrales Dashboard für Mailresponder v9
// • rendert Benutzer-Widgets aus  admin/dashboard/widgets/
// • nutzt Bootstrap-Grid, Error-Handling und Auto-Dismiss-Alerts
// • loggt Fehler über ErrorLogger (1-Parameter-Signatur)
// --------------------------------------------------------------

session_start();
require_once __DIR__ . '/../includes/init.php';
require_once __DIR__ . '/../auth/AuthController.php';

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

/* ---------------------------------------------------------------------
   DB-Verbindung
   ------------------------------------------------------------------- */
$db = Database::getInstance();
$setupStatus = getSystemSetupStatus($db);
$sendProtection = getSendProtectionStatus($db, $setupStatus);

$title      = 'Dashboard';
$widgetDir  = __DIR__ . '/dashboard/widgets/';

/**
 * ------------------------------------------------------------
 * Spalten-Mapping: Widget-Name  →  Bootstrap-Grid-Klasse
 * Fehlt ein Eintrag, greift $defaultColClass.
 * ------------------------------------------------------------
 */
$colClasses = [
    'empfaenger_stats' => 'col-xl-4 col-lg-6 mb-4',
    'mails_today'      => 'col-xl-3 col-lg-6 mb-4',
    'queue_status'     => 'col-xl-3 col-lg-6 mb-4',
    'bounce_stats'     => 'col-xl-4 col-lg-6 mb-4',

    // NEU: Reputation-Widget
    'reputation'       => 'col-xl-4 col-lg-6 mb-4',
];
$defaultColClass = 'col-xl-4 col-lg-6 mb-4';

/**
 * ------------------------------------------------------------
 * 1) Widgets des angemeldeten Benutzers ermitteln
 *    – hier Platzhalter-Liste; ersetze durch DB-Abruf, falls vorhanden
 * ------------------------------------------------------------
 */
$userWidgets = [
    'empfaenger_stats',
    'list_stats',
    'subscription_stats',
    'mails_today',
    'queue_status',
    'bounce_stats',
];

/**
 * ------------------------------------------------------------
 * 2) HTML-Ausgabe ­sammeln
 * ------------------------------------------------------------
 */
ob_start();
?>
<div class="page-header">
  Dashboard
</div>

<div class="page-content">
  <?= renderSystemStatusPanel($setupStatus, $sendProtection) ?>
  <div class="row"><!-- Bootstrap-Grid-Zeile -->

<?php
/* ------------------------------------------------------------
 * 3) Widgets durchlaufen und rendern
 * ---------------------------------------------------------- */
foreach ($userWidgets as $widget) {

    $file     = $widgetDir . $widget . '.php';              // PHP-Datei des Widgets
    $colClass = $colClasses[$widget] ?? $defaultColClass;   // Breite bestimmen
    echo "<div class=\"{$colClass}\">";

    if (is_readable($file)) {
        try {
            /* ---- Output-Buffer, damit Fehler im Widget das Dashboard
             *      nicht zerschießen und wir ggf. einen Fallback-Alert
             *      zeigen können.                               ------*/
            ob_start();
            include $file;
            echo ob_get_clean();

        } catch (Throwable $e) {
            // Fehler ins Log schreiben – EIN String‐Parameter!
            ErrorLogger::logSqlError(
                __FILE__ . " | Widget {$widget} Exception: " . $e->getMessage()
            );

            // Rote Alert-Box im Dashboard anzeigen
            echo "
            <div class='alert alert-danger auto-dismiss' role='alert'>
              <i class='ti ti-bug me-1'></i>
              <strong>{$widget}</strong> – interner Fehler. Bitte später erneut versuchen.
            </div>";
        }

    } else {
        // Widget-Datei existiert nicht
        ErrorLogger::logSqlError(
            __FILE__ . " | Widget {$widget} nicht gefunden"
        );

        echo "
        <div class='alert alert-warning auto-dismiss' role='alert'>
          <i class='ti ti-alert-triangle me-1'></i>
          Widget <strong>{$widget}</strong> nicht gefunden
        </div>";
    }

    echo '</div>';   // Ende Grid-Spalte
}
?>

  </div><!-- /.row -->
</div><!-- /.page-content -->

<?php
$pageContent = ob_get_clean();
include __DIR__ . '/template.php';
?>

<!-- --------------------------------------------------------------
     4) Mini-JS für Auto-Dismiss (falls nicht bereits global geladen)
--------------------------------------------------------------- -->
<script>
document.addEventListener('DOMContentLoaded', () => {
  setTimeout(() => {
    document.querySelectorAll('.auto-dismiss').forEach(el => el.remove());
  }, 6000); // 6 Sekunden sichtbar
});
</script>

