<?php
/**
 * Nutzer löschen (admin/nutzer_delete.php)
 * --------------------------------------------------
 * Löscht einen bestehenden Admin‑/Listen‑Nutzer aus der Tabelle admin_users.
 *
 * Mailresponder v9‑Richtlinien:
 *   • Ausführliche, verständliche Kommentare in sämtlichen kritischen Blöcken
 *   • Jede SQL‑Operation ist in try/catch eingebettet
 *   • Erfolgs‑ und Fehler‑Logging über ErrorLogger::logSqlSuccess / logSqlError
 *   • Benutzer‑Aktions‑Protokollierung mit logUserAction
 *   • Keine doppelte Deklaration von logUserAction / logSettingChange;
 *     beide Funktionen sind global in includes/functions.php verfügbar.
 */

// --------------------------------------------------
// 1) Sitzungs‑ und Abhängigkeits‑Initialisierung
// --------------------------------------------------
if (session_status() === PHP_SESSION_NONE) {
    session_start(); // Session starten, falls noch nicht aktiv
}

require_once __DIR__ . '/../includes/init.php';     // Datenbank, ErrorLogger, functions.php etc.
require_once __DIR__ . '/../auth/AuthController.php';

// --------------------------------------------------
// 2) Authentifizierung prüfen
// --------------------------------------------------
$auth = new AuthController();
if (!$auth->isLoggedIn()) {
    header('Location: ' . $adminLoginPath);
    exit;
}

// --------------------------------------------------
// 3) Eingabewerte validieren
// --------------------------------------------------
$id = (int)($_GET['id'] ?? 0);
if ($id <= 0) {
    die('Ungültige Nutzer‑ID.');
}

// Aktueller Admin muss in Session hinterlegt sein
if (!isset($_SESSION['admin_id'])) {
    die('Nicht autorisiert.');
}

// Eigene ID darf nicht gelöscht werden
if ($id === (int)$_SESSION['admin_id']) {
    die('Du kannst deinen eigenen Nutzer nicht löschen.');
}

// --------------------------------------------------
// 4) Datenbank‑Handle holen
// --------------------------------------------------
$db = Database::getInstance();

// --------------------------------------------------
// 5) Ziel‑Nutzer laden (für Logging & Prüfungen)
// --------------------------------------------------
try {
    $stmt = $db->prepare('SELECT email, role FROM admin_users WHERE id = ?');
    $stmt->execute([$id]);
    ErrorLogger::logSqlSuccess('nutzer_delete: load target user | SQL: SELECT email,role FROM admin_users by id | params: ' . json_encode([$id], JSON_UNESCAPED_UNICODE));
    $user = $stmt->fetch();
} catch (PDOException $e) {
    ErrorLogger::logSqlError('nutzer_delete: load target user failed | SQL: SELECT email,role FROM admin_users by id | params: ' . json_encode([$id], JSON_UNESCAPED_UNICODE) . ' | error: ' . $e->getMessage());
    die('Fehler beim Laden des Nutzers.');
}

if (!$user) {
    die('Nutzer nicht gefunden.');
}

// --------------------------------------------------
// 6) Prüfen, ob letzter aktiver Admin gelöscht würde
// --------------------------------------------------
if ($user['role'] === 'admin') {
    try {
        $stmt = $db->prepare("SELECT COUNT(*) FROM admin_users WHERE role = 'admin' AND is_active = 1 AND id != ?");
        $stmt->execute([$id]);
        ErrorLogger::logSqlSuccess('nutzer_delete: count remaining admins | params: ' . json_encode([$id], JSON_UNESCAPED_UNICODE));
        $remainingAdmins = (int)$stmt->fetchColumn();
    } catch (PDOException $e) {
        ErrorLogger::logSqlError('nutzer_delete: count remaining admins failed | params: ' . json_encode([$id], JSON_UNESCAPED_UNICODE) . ' | error: ' . $e->getMessage());
        die('Fehler bei der Admin‑Prüfung.');
    }

    if ($remainingAdmins <= 0) {
        die('Dieser Nutzer ist der letzte aktive Admin und kann nicht gelöscht werden.');
    }
}

// --------------------------------------------------
// 7) Löschen durchführen
// --------------------------------------------------
try {
    $stmt = $db->prepare('DELETE FROM admin_users WHERE id = ?');
    $stmt->execute([$id]);
    ErrorLogger::logSqlSuccess('nutzer_delete: delete user | SQL: DELETE admin_users by id | params: ' . json_encode([$id], JSON_UNESCAPED_UNICODE));
    $adminId = $_SESSION['admin_id'] ?? ($_SESSION['user_id'] ?? 0);
    if ($adminId) {
        logSettingChange($adminId, 'delete_user', 'admin_users', json_encode([
            'id' => (int)$id,
            'email' => $user['email'] ?? null,
            'role' => $user['role'] ?? null
        ], JSON_UNESCAPED_UNICODE));
    }


    // Benutzer‑Aktion loggen (Ausführender = aktueller Admin)
    logUserAction($_SESSION['admin_id'], 'Nutzer gelöscht', 'Ziel‑E‑Mail: ' . $user['email']);

    // Erfolgsnachricht für UI
    $_SESSION['success_message'] = '✅ Nutzer wurde erfolgreich gelöscht.';
} catch (PDOException $e) {
    ErrorLogger::logSqlError('nutzer_delete: delete failed | SQL: DELETE admin_users by id | params: ' . json_encode([$id], JSON_UNESCAPED_UNICODE) . ' | error: ' . $e->getMessage());
    die('Fehler beim Löschen des Nutzers.');
}

// --------------------------------------------------
// 8) Redirect zurück zur Übersicht
// --------------------------------------------------
header('Location: nutzer.php');
exit;
?>


