/** Module manager (formerly "plugins"): installed modules, catalog, install/uninstall and module windows. */
import { call, subscribe } from "../transport";
import type { ModuleManifest, ModuleWindowState, Payload } from "../types";

export const modules = Object.freeze({
  list: () => call<ModuleManifest[]>("core_modules_list", "plugins:list"),
  getState: () => call<Payload>("core_modules_get_state", "plugins:getState"),
  checkCatalog: () => call<Payload>("core_modules_check_catalog", "plugins:checkCatalog"),
  install: (releaseId: string) => call<Payload>("core_modules_install", "plugins:install", { releaseId }),
  uninstall: (moduleId: string) => call<Payload>("core_modules_uninstall", "plugins:uninstall", { pluginId: moduleId }),
  open: (moduleId: string) => call<ModuleManifest>("core_modules_open", "plugins:open", { pluginId: moduleId }),
  onWindowState: (callback: (windows: ModuleWindowState[]) => void) => subscribe("core:pluginWindowState", callback)
});
