/** Remote users, groups, keys and SSH policy (`users.read`, `users.manage`). */
import { call } from "../transport";
import type { Payload } from "../types";

export const users = Object.freeze({
  list: (sessionId: string) => call<Payload>("module_users_list", "plugin:users:list", { sessionId }),
  manage: (sessionId: string, payload: Payload) => call<Payload>("module_users_manage", "plugin:users:manage", { ...payload, sessionId }),
  privileges: (sessionId: string, refresh = false) => call<Payload>("module_users_privileges", "plugin:users:privileges", { sessionId, refresh }),
  inventory: (sessionId: string, options: Payload = {}) => call<Payload>("module_users_inventory", "plugin:users:inventory", { ...options, sessionId }),
  detail: (sessionId: string, username: string, options: Payload = {}) => call<Payload>("module_users_detail", "plugin:users:detail", { ...options, sessionId, username }),
  keys: (sessionId: string, payload: Payload) => call<Payload>("module_users_keys", "plugin:users:keys", { ...payload, sessionId }),
  sshPolicy: (sessionId: string, payload: Payload) => call<Payload>("module_users_ssh_policy", "plugin:users:sshPolicy", { ...payload, sessionId }),
  keychainPublicKeys: () => call<Payload>("module_keychain_public_ssh", "plugin:keychain:publicSsh"),
  sshPasswordOffAll: (sessionId: string, payload: Payload) => call<Payload>("module_users_ssh_password_off_all", "plugin:users:sshPasswordOffAll", { ...payload, sessionId })
});
