/** Disk Manager capabilities (`disks.read`, `disks.manage`). Plans are bound to one server and single-use. */
import { call } from "../transport";
import type { Payload } from "../types";

export const disks = Object.freeze({
  inspect: (sessionId: string, options: Payload = {}) => call<Payload>("module_disks_inspect", "plugin:disks:inspect", { ...options, sessionId }),
  smart: (sessionId: string, device: string, options: Payload = {}) => call<Payload>("module_disks_smart", "plugin:disks:smart", { ...options, sessionId, device }),
  plan: (sessionId: string, operations: unknown[], options: Payload = {}) => call<Payload>("module_disks_plan", "plugin:disks:plan", { ...options, sessionId, operations }),
  autoExpand: (sessionId: string, suggestionId: string, options: Payload = {}) => call<Payload>("module_disks_auto_expand", "plugin:disks:autoExpand", { ...options, sessionId, suggestionId }),
  cancelPlan: (planId: string) => call<Payload>("module_disks_cancel_plan", "plugin:disks:cancelPlan", { planId }),
  apply: (sessionId: string, planId: string, options: Payload = {}) => call<Payload>("module_disks_apply", "plugin:disks:apply", { ...options, sessionId, planId }),
  jobs: (sessionId: string, options: Payload = {}) => call<Payload>("module_disks_jobs", "plugin:disks:jobs", { ...options, sessionId }),
  jobStatus: (sessionId: string, jobId: string, offset = 0, options: Payload = {}) => call<Payload>("module_disks_job_status", "plugin:disks:jobStatus", { ...options, sessionId, jobId, offset })
});
