<?php
/**
 * cli_reset_password.php
 * Konsolen-Fallback für den Passwort-Reset (v.a. für die USB-Stick-Version,
 * wo bereits ein Terminal-Fenster offen ist, siehe HomeBox "reset-password").
 *
 * Aufruf:
 *   php cli_reset_password.php <benutzername>
 *
 * Fragt danach interaktiv nach dem neuen Passwort (zweimal, zur Bestätigung).
 * Funktioniert nur über die Kommandozeile (php-cli), nicht über den Webserver.
 */

if (php_sapi_name() !== 'cli') {
    http_response_code(403);
    die("Dieses Skript darf nur über die Kommandozeile ausgeführt werden.\n");
}

require_once __DIR__ . '/db.php';
require_once __DIR__ . '/security.php';

$username = $argv[1] ?? null;

if (!$username) {
    fwrite(STDERR, "Verwendung: php cli_reset_password.php <benutzername>\n");
    exit(1);
}

$user = $db->selectOne("SELECT id, username FROM users WHERE LOWER(username) = LOWER(?)", [$username]);

if (!$user) {
    fwrite(STDERR, "Fehler: Benutzer '$username' wurde nicht gefunden.\n");
    exit(1);
}

echo "Benutzer gefunden: {$user['username']}\n";

// Passwort-Eingabe ohne Echo, falls stty verfügbar ist (Linux/Mac-Terminals)
function readHiddenInput(string $prompt): string {
    echo $prompt;
    if (stripos(PHP_OS, 'WIN') === 0) {
        // Windows: kein stty verfügbar - Eingabe wird sichtbar sein.
        return trim(fgets(STDIN));
    }
    system('stty -echo');
    $value = trim(fgets(STDIN));
    system('stty echo');
    echo "\n";
    return $value;
}

$password1 = readHiddenInput("Neues Passwort (mind. 8 Zeichen): ");
if (strlen($password1) < 8) {
    fwrite(STDERR, "Fehler: Das Passwort muss mindestens 8 Zeichen lang sein.\n");
    exit(1);
}

$password2 = readHiddenInput("Neues Passwort wiederholen: ");
if ($password1 !== $password2) {
    fwrite(STDERR, "Fehler: Die beiden Passwörter stimmen nicht überein.\n");
    exit(1);
}

try {
    $hash = Security::hashPassword($password1);
    $db->execute("UPDATE users SET password = ? WHERE id = ?", [$hash, $user['id']]);
    Security::logSecurityEvent('password_reset_cli', ['username' => $user['username']]);
    echo "✔ Passwort für '{$user['username']}' wurde erfolgreich geändert.\n";
} catch (Exception $e) {
    fwrite(STDERR, "Fehler beim Speichern: " . $e->getMessage() . "\n");
    exit(1);
}
