/** NGINX configuration management (`nginx.read`, `nginx.manage`). */
import { call } from "../transport";
import type { Payload } from "../types";

const command = (name: string, action: string) => (sessionId: string, payload: Payload = {}) => call<Payload>(`module_nginx_${name}`, `plugin:nginx:${action}`, { ...payload, sessionId });

export const nginx = Object.freeze({
  inspect: (sessionId: string) => call<Payload>("module_nginx_inspect", "plugin:nginx:inspect", { sessionId }),
  readConfig: (sessionId: string, payload: Payload) => call<Payload>("module_nginx_read_config", "plugin:nginx:readConfig", { ...payload, sessionId }),
  dumpConfig: (sessionId: string, sudoPassword?: string, rememberSudo = false) => call<Payload>("module_nginx_dump_config", "plugin:nginx:dumpConfig", { sessionId, sudoPassword, rememberSudo }),
  testConfig: (sessionId: string, sudoPassword?: string, rememberSudo = false) => call<Payload>("module_nginx_test_config", "plugin:nginx:testConfig", { sessionId, sudoPassword, rememberSudo }),
  saveConfig: (sessionId: string, payload: Payload) => call<Payload>("module_nginx_save_config", "plugin:nginx:saveConfig", { ...payload, sessionId }),
  reload: (sessionId: string, sudoPassword?: string, confirm = false, rememberSudo = false) => call<Payload>("module_nginx_reload", "plugin:nginx:reload", { sessionId, sudoPassword, confirm, rememberSudo }),
  sites: command("sites", "sites"),
  planSite: command("plan_site", "planSite"),
  createSite: command("create_site", "createSite"),
  setSiteEnabled: command("set_site_enabled", "setSiteEnabled"),
  adoptSite: command("adopt_site", "adoptSite"),
  dropBrokenLink: command("drop_broken_link", "dropBrokenLink"),
  planRoute: command("plan_route", "planRoute"),
  applyRoute: command("apply_route", "applyRoute"),
  diagnoseDomain: command("diagnose_domain", "diagnoseDomain"),
  planEdit: command("plan_edit", "planEdit"),
  backups: command("backups", "backups"),
  readBackup: command("read_backup", "readBackup"),
  restoreBackup: command("restore_backup", "restoreBackup"),
  certificates: command("certificates", "certificates"),
  installCertbot: command("install_certbot", "installCertbot"),
  issueCertificate: command("issue_certificate", "issueCertificate"),
  readLog: command("read_log", "readLog"),
  probeBackends: command("probe_backends", "probeBackends")
});
