query("SELECT id, username, role, is_enabled, created_at FROM users ORDER BY username ASC"); return $stmt->fetchAll() ?: []; } function get_user_by_id(int $id): ?array { $pdo = get_db(); $stmt = $pdo->prepare("SELECT id, username, role, is_enabled, created_at FROM users WHERE id = ?"); $stmt->execute([$id]); $res = $stmt->fetch(); return $res ?: null; } function count_users(): int { $pdo = get_db(); return (int) $pdo->query("SELECT COUNT(*) FROM users")->fetchColumn(); } function count_enabled_users(): int { $pdo = get_db(); return (int) $pdo->query("SELECT COUNT(*) FROM users WHERE is_enabled = 1")->fetchColumn(); } function toggle_user_enabled(int $id): bool { $pdo = get_db(); $stmt = $pdo->prepare("UPDATE users SET is_enabled = CASE WHEN is_enabled = 1 THEN 0 ELSE 1 END WHERE id = ?"); return $stmt->execute([$id]); } function username_exists(string $username, ?int $excludeId = null): bool { $pdo = get_db(); if ($excludeId !== null) { $stmt = $pdo->prepare("SELECT 1 FROM users WHERE username = ? AND id != ?"); $stmt->execute([$username, $excludeId]); } else { $stmt = $pdo->prepare("SELECT 1 FROM users WHERE username = ?"); $stmt->execute([$username]); } return (bool) $stmt->fetchColumn(); } function create_user(string $username, string $password, string $role): int { $pdo = get_db(); $hash = password_hash($password, PASSWORD_DEFAULT); $stmt = $pdo->prepare("INSERT INTO users (username, password_hash, role) VALUES (?, ?, ?)"); $stmt->execute([$username, $hash, $role]); return (int) $pdo->lastInsertId(); } function set_user_password(int $id, string $newPassword): bool { $pdo = get_db(); $hash = password_hash($newPassword, PASSWORD_DEFAULT); $stmt = $pdo->prepare("UPDATE users SET password_hash = ? WHERE id = ?"); return $stmt->execute([$hash, $id]); } function verify_user_password(int $id, string $password): bool { $pdo = get_db(); $stmt = $pdo->prepare("SELECT password_hash FROM users WHERE id = ?"); $stmt->execute([$id]); $hash = $stmt->fetchColumn(); return is_string($hash) && password_verify($password, $hash); } function delete_user(int $id): bool { $pdo = get_db(); $stmt = $pdo->prepare("DELETE FROM users WHERE id = ?"); return $stmt->execute([$id]); }