{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://www.ibm.com/schemas/ibm-mq/queue.json",
  "title": "IBM MQ Queue",
  "description": "An IBM MQ queue is a named object that stores messages for asynchronous consumption. Queues can be local, alias, remote, model, or cluster types, each serving different messaging patterns.",
  "type": "object",
  "required": ["name", "type"],
  "properties": {
    "name": {
      "type": "string",
      "description": "Name of the queue",
      "minLength": 1,
      "maxLength": 48,
      "pattern": "^[A-Za-z0-9._/%]+$"
    },
    "type": {
      "type": "string",
      "enum": ["local", "alias", "remote", "model", "cluster"],
      "description": "Type of the queue"
    },
    "description": {
      "type": "string",
      "description": "Description of the queue",
      "maxLength": 64
    },
    "maximumDepth": {
      "type": "integer",
      "minimum": 0,
      "maximum": 999999999,
      "description": "Maximum number of messages that can be stored on the queue"
    },
    "maximumMessageLength": {
      "type": "integer",
      "minimum": 0,
      "maximum": 104857600,
      "description": "Maximum message length in bytes for messages on this queue"
    },
    "inhibitPut": {
      "type": "boolean",
      "description": "Whether put operations are inhibited on this queue"
    },
    "inhibitGet": {
      "type": "boolean",
      "description": "Whether get operations are inhibited on this queue"
    },
    "defaultPersistence": {
      "type": "string",
      "enum": ["persistent", "notPersistent"],
      "description": "Default persistence for messages put on this queue"
    },
    "defaultPriority": {
      "type": "integer",
      "minimum": 0,
      "maximum": 9,
      "description": "Default priority for messages put on this queue"
    },
    "backoutThreshold": {
      "type": "integer",
      "minimum": 0,
      "description": "Number of times a message can be backed out before being moved"
    },
    "backoutRequeueQueue": {
      "type": "string",
      "description": "Queue to which messages are moved after exceeding the backout threshold",
      "maxLength": 48
    },
    "isTransmissionQueue": {
      "type": "boolean",
      "description": "Whether this queue is used as a transmission queue for remote messaging"
    },
    "triggerControl": {
      "type": "string",
      "enum": ["on", "off"],
      "description": "Whether triggering is enabled for this queue"
    },
    "triggerType": {
      "type": "string",
      "enum": ["none", "first", "every", "depth"],
      "description": "Type of triggering configured for this queue"
    },
    "shareability": {
      "type": "string",
      "enum": ["shareable", "notShareable"],
      "description": "Whether the queue can be opened by multiple applications simultaneously"
    },
    "currentDepth": {
      "type": "integer",
      "minimum": 0,
      "description": "Current number of messages on the queue"
    },
    "openInputCount": {
      "type": "integer",
      "minimum": 0,
      "description": "Number of handles currently open for input (get)"
    },
    "openOutputCount": {
      "type": "integer",
      "minimum": 0,
      "description": "Number of handles currently open for output (put)"
    },
    "lastPut": {
      "type": "string",
      "format": "date-time",
      "description": "Timestamp of the last message put on the queue"
    },
    "lastGet": {
      "type": "string",
      "format": "date-time",
      "description": "Timestamp of the last message retrieved from the queue"
    },
    "alias": {
      "$ref": "#/$defs/AliasProperties"
    },
    "remote": {
      "$ref": "#/$defs/RemoteProperties"
    },
    "cluster": {
      "$ref": "#/$defs/ClusterProperties"
    }
  },
  "$defs": {
    "AliasProperties": {
      "type": "object",
      "description": "Properties specific to alias queues",
      "properties": {
        "baseQueueName": {
          "type": "string",
          "description": "Name of the base queue or topic that this alias resolves to"
        },
        "baseType": {
          "type": "string",
          "enum": ["queue", "topic"],
          "description": "Whether the alias resolves to a queue or topic"
        }
      }
    },
    "RemoteProperties": {
      "type": "object",
      "description": "Properties specific to remote queue definitions",
      "properties": {
        "remoteQueueName": {
          "type": "string",
          "description": "Name of the queue on the remote queue manager"
        },
        "remoteQueueManager": {
          "type": "string",
          "description": "Name of the remote queue manager"
        },
        "transmissionQueue": {
          "type": "string",
          "description": "Name of the transmission queue to use"
        }
      }
    },
    "ClusterProperties": {
      "type": "object",
      "description": "Properties specific to cluster queues",
      "properties": {
        "clusterName": {
          "type": "string",
          "description": "Name of the cluster this queue belongs to"
        },
        "clusterNamelist": {
          "type": "string",
          "description": "Name of the namelist of clusters this queue belongs to"
        },
        "defaultBind": {
          "type": "string",
          "enum": ["onOpen", "notFixed", "onGroup"],
          "description": "Default binding for cluster queue"
        }
      }
    }
  }
}
