{
  "$schema": "http://json-schema.org/draft-07/schema",
  "description": "The configuration file schema of the generator of PowerShell CIM scripts.",
  "type": "object",
  "properties": {
    "$schema": {
      "type": "string",
      "minLength": 1
    },
    "collection": {
      "description": "The collection of script definition.",
      "type": "array",
      "uniqueItems": true,
      "minItems": 1,
      "items": {
        "required": [
          "name",
          "description",
          "roles",
          "scope",
          "type",
          "namespace"
        ],
        "properties": {
          "name": {
            "description": "The name of script generated, must follow PowerShell supported Verb and recommend using 'Cim' prefix. Ex. Get-CimWin32ComputerSystem",
            "type": "string",
            "minLength": 1
          },
          "description": {
            "description": "The description of the script. It's displayed as part of help message.",
            "type": "string",
            "minLength": 1
          },
          "roles": {
            "description": "The list of roles of JEA. ex. 'Administrator', 'Reader'",
            "type": "array",
            "items": {
              "required": [],
              "properties": {}
            }
          },
          "scope": {
            "description": "The scope of scripts such as 'public' or 'internal'",
            "type": "string",
            "minLength": 1
          },
          "type": {
            "description": "The CIM query API type used on module code.",
            "type": "string",
            "minLength": 1,
            "enum": [
              "getInstanceMultiple",
              "getBatchInstanceMultiple",
              "getInstanceSingle",
              "getBatchInstanceSingle",
              "invokeMethodInstance",
              "invokeBatchMethodInstance",
              "invokeMethodStatic",
              "invokeBatchMethodStatic",
              "setInstance",
              "setBatchInstance",
              "modifyInstance",
              "modifyBatchInstance",
              "deleteInstance",
              "deleteBatchInstance",
              "getInstanceQuery",
              "getBatchInstanceQuery"
            ]
          },
          "namespace": {
            "description": "The CIM namespace.",
            "type": "string",
            "minLength": 1
          },
          "className": {
            "description": "The CIM class name.",
            "type": "string",
            "minLength": 1
          },
          "methodName": {
            "description": "The CIM method name to invoke.",
            "type": "string",
            "minLength": 1
          },
          "keyProperties": {
            "description": "The Key properties to identify the CIM instance.",
            "type": "array",
            "uniqueItems": true,
            "minItems": 1,
            "items": {
              "required": [
                "name",
                "type"
              ],
              "properties": {
                "name": {
                  "description": "The name of key property.",
                  "type": "string",
                  "minLength": 1
                },
                "type": {
                  "description": "The PowerShell data type.",
                  "type": "string",
                  "minLength": 1
                }
              }
            }
          },
          "arguments": {
            "description": "The data properties to update.",
            "type": "array",
            "uniqueItems": true,
            "minItems": 1,
            "items": {
              "required": [
                "name",
                "type"
              ],
              "properties": {
                "name": {
                  "description": "The name of property.",
                  "type": "string",
                  "minLength": 1
                },
                "type": {
                  "description": "The PowerShell data type.",
                  "type": "string",
                  "minLength": 1
                }
              }
            }
          }
        }
      }
    }
  },
  "required": [
    "$schema",
    "collection"
  ]
}
