config update:
  return_type: ConfigAgentResponse
  help: |
    (internal) Update Imunify configuration (`/etc/sysconfig/imunify360/imunify360.config.d/90-local.config`).
  # FIXME: cli section required for UI tests
  cli:
    users:
      - root
  type: dict
  schema:
    # workaround for https://cloudlinux.atlassian.net/browse/DEF-3902
    # TODO: remove items, make data not nullable
    items:
      type: list
      schema:
        type: string
      help: (internal)
    data:
      type: string
      nullable: true
      positional: true
      help: |
        Config options to update, as a JSON-encoded string.
        Note: it doesn't have to be a full config, only the options that need to be updated.
        Example: `{"MALWARE_SCAN": {"enabled": true}}`
    user:
      type: string
      nullable: true
      help: |
        Admins can specify a user to update the config for.
        If not specified, and executed by admin, the config will be updated for root.
        If not specified, and executed by user, the config will be updated for that user.

config patch:
  return_type: ConfigAgentResponse
  help: |
    Update Imunify configuration (`/etc/sysconfig/imunify360/imunify360.config.d/90-local.config`).
  # FIXME: cli section required for UI tests
  cli:
    users:
      - root
  type: dict
  schema:
    data:
      type: dict
      nullable: true
      help: |
        Config options to update.
        Note: it doesn't have to be a full config, only the options that need to be updated.
        Example: `{"MALWARE_SCAN": {"enabled": true}}`
    user:
      type: string
      nullable: true
      help: |
        Admins can specify a user to update the config for.
        If not specified, and executed by admin, the config will be updated for root.
        If not specified, and executed by user, the config will be updated for that user.

config patch-many:
  help: |
    Update Imunify configuration for multiple users.
  cli:
    users:
      - root
  type: dict
  schema:
    data:
      type: dict
      nullable: true
      help: |
        Config options to update.
        Note: it doesn't have to be a full config, only the options that need to be updated.
        Example: `{"MALWARE_SCAN": {"enabled": true}}`
    users:
      type: list
      schema:
        type: string
      nullable: false
      help: |
        List of users to update the config for.
        Example: `["user1", "user2", "root"]`

config get-many:
  return_type: ConfigAgentResponse
  help: |
    Get Imunify configuration for multiple users.
  cli:
    users:
      - root
  type: dict
  schema:
    users:
      type: list
      schema:
        type: string
      nullable: false
      help: |
        List of users to get the config for.
        Example: `"user1", "user2", "root"`

config show:
  return_type: ConfigAgentResponse
  help: |
    Get Imunify configuration.
    This is the result of merging all config files in `/etc/sysconfig/imunify360/imunify360.config.d/` directory.
  cli:
    users:
      - root
  type: dict
  schema:
    user:
      type: string
      nullable: true
      help: |
        Admins can specify whose config to get.
        If not specified, and executed by admin, returns the root config.
        If not specified, and executed by user, returns the config of that user.

config show defaults:
  help: |
    Get details on how the config is merged:
      - `mutable_config` - all files in `/etc/sysconfig/imunify360/imunify360.config.d/` directory before `90-local.config`. They can be overridden via API.
      - `local_config` - `/etc/sysconfig/imunify360/imunify360.config.d/90-local.config`, controlled by API.
      - `immutable_config` - all files in `/etc/sysconfig/imunify360/imunify360.config.d/` directory after `90-local.config`. They cannot be overridden via API.
  cli:
    users:
      - root
  type: dict
