/** Local SSH/OpenPGP key and password generation (`keys.generate`). */
import { call, subscribeStrict } from "../transport";
import type { Payload } from "../types";

export const keys = Object.freeze({
  edit: (payload: Payload) => call<Payload>("module_keys_edit", "plugin:keys:edit", payload),
  state: () => call<Payload>("module_keys_state", "plugin:keys:state"),
  onModeChanged: (callback: (state: Payload) => void) => subscribeStrict("module:keys:modeChanged", callback, "generator mode"),
  saveArtifact: (generationId: string, index: number) => call<Payload>("module_keys_save_artifact", "plugin:keys:saveArtifact", { generationId, index }),
  saveBundle: (generationId: string) => call<Payload>("module_keys_save_bundle", "plugin:keys:saveBundle", { generationId }),
  storeKeychain: (generationId: string) => call<Payload>("module_keys_store_keychain", "plugin:keys:storeKeychain", { generationId }),
  generate: (payload: Payload) => call<Payload>("module_keys_generate", "plugin:keys:generate", payload),
  save: (generationId: string) => call<Payload>("module_keys_save", "plugin:keys:save", { generationId }),
  password: (options: Payload) => call<Payload>("module_keys_password", "plugin:keys:password", options),
  copyPassword: (passwordId: string) => call<Payload>("module_keys_copy_password", "plugin:keys:copyPassword", { passwordId })
});
