/**
 * CH-J API — the single entry point between the web UI, modules and the Rust Core.
 *
 * - `core`:   internal Core API for the main window (vault, profiles, SSH, updates, …).
 * - `module`: public, versioned Module API (formerly Plugin API). Version 1.8.0 adds `host` and
 *             OpenPGP verification to Plugin API 1.7.0 of CH-J Server Manager 0.1.0.
 *
 * Permissions are enforced in the Rust Core (calling window identity + module manifest);
 * these wrappers only provide typing and a stable shape.
 */
import { app } from "./core/app";
import { config } from "./core/config";
import { biometrics, vault } from "./core/vault";
import { profiles } from "./core/profiles";
import { availability } from "./core/availability";
import { ssh } from "./core/ssh";
import { diagnostics } from "./core/diagnostics";
import { updates } from "./core/updates";
import { modules } from "./core/modules";
import { license } from "./core/license";
import { windowControls } from "./core/window";
import { standby } from "./core/standby";
import { info, close, minimize, host, ui } from "./module/ui";
import { sessions } from "./module/sessions";
import { system } from "./module/system";
import { disks } from "./module/disks";
import { keys } from "./module/keys";
import { logs } from "./module/logs";
import { users } from "./module/users";
import { apache } from "./module/apache";
import { rsync } from "./module/rsync";
import { network } from "./module/network";
import { nginx } from "./module/nginx";
import { files } from "./module/sftp";
import { hashing } from "./module/hashing";

export * from "./types";

/** Version of the public Module API (semver; compatible with Plugin API ^1.x manifests). */
export const MODULE_API_VERSION = "1.16.0";
/** Version of the internal Core API used by the main window. */
export const CORE_API_VERSION = "1.1.0";

export const core = Object.freeze({ app, config, vault, biometrics, profiles, availability, ssh, diagnostics, updates, modules, windowControls, standby });

export const moduleApi = Object.freeze({
  version: MODULE_API_VERSION,
  getInfo: info,
  close,
  minimize,
  host,
  ui,
  sessions,
  system,
  disks,
  keys,
  logs,
  users,
  apache,
  rsync,
  network,
  nginx,
  files,
  hashing
});

export const licenseApi = license;
