{
  "$id": "message-queue.json",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "IBM MQ Message Queue",
  "description": "Represents an IBM MQ message queue including its configuration, runtime status, depth, and messaging properties for point-to-point and publish-subscribe messaging patterns.",
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "maxLength": 48,
      "description": "The unique name of the queue within the queue manager."
    },
    "displayName": {
      "type": "string",
      "description": "Human-readable display name for the queue."
    },
    "description": {
      "type": "string",
      "maxLength": 64,
      "description": "Description of the queue purpose."
    },
    "type": {
      "type": "string",
      "enum": ["local", "alias", "remote", "model", "cluster"],
      "description": "Queue type."
    },
    "queueManager": {
      "type": "string",
      "description": "Name of the queue manager that owns this queue."
    },
    "maxDepth": {
      "type": "integer",
      "default": 5000,
      "minimum": 0,
      "maximum": 999999999,
      "description": "Maximum number of messages that can be held on the queue."
    },
    "maxMessageLength": {
      "type": "integer",
      "default": 4194304,
      "minimum": 0,
      "maximum": 104857600,
      "description": "Maximum length of a message in bytes."
    },
    "currentDepth": {
      "type": "integer",
      "description": "Current number of messages on the queue.",
      "readOnly": true
    },
    "persistence": {
      "type": "object",
      "description": "Message persistence configuration.",
      "properties": {
        "default": {
          "type": "string",
          "enum": ["persistent", "nonPersistent"],
          "default": "persistent",
          "description": "Default persistence for messages put on this queue."
        }
      }
    },
    "inhibitPut": {
      "type": "boolean",
      "default": false,
      "description": "Whether put operations are inhibited on this queue."
    },
    "inhibitGet": {
      "type": "boolean",
      "default": false,
      "description": "Whether get operations are inhibited on this queue."
    },
    "triggerControl": {
      "type": "object",
      "description": "Triggering configuration for the queue.",
      "properties": {
        "enabled": {
          "type": "boolean",
          "default": false,
          "description": "Whether triggering is enabled."
        },
        "type": {
          "type": "string",
          "enum": ["NONE", "FIRST", "EVERY", "DEPTH"],
          "description": "Trigger type."
        },
        "depth": {
          "type": "integer",
          "description": "Trigger depth threshold."
        },
        "messageType": {
          "type": "integer",
          "description": "Message type for triggering."
        },
        "processName": {
          "type": "string",
          "description": "Process to initiate when triggered."
        },
        "initializationQueue": {
          "type": "string",
          "description": "Initiation queue name."
        }
      }
    },
    "cluster": {
      "type": "object",
      "description": "Cluster queue properties (for cluster queues).",
      "properties": {
        "name": {
          "type": "string",
          "description": "Cluster name."
        },
        "workloadRank": {
          "type": "integer",
          "description": "Cluster workload rank."
        },
        "workloadPriority": {
          "type": "integer",
          "description": "Cluster workload priority."
        },
        "workloadUseQueue": {
          "type": "string",
          "enum": ["local", "any"],
          "description": "Cluster workload queue usage."
        }
      }
    },
    "deadLetterQueue": {
      "type": "string",
      "description": "Name of the dead letter queue for undeliverable messages."
    },
    "backoutThreshold": {
      "type": "integer",
      "description": "Number of times a message can be backed out before being moved to the backout queue."
    },
    "backoutQueue": {
      "type": "string",
      "description": "Name of the backout requeue queue."
    },
    "shareability": {
      "type": "string",
      "enum": ["shareable", "notShareable"],
      "default": "shareable",
      "description": "Whether the queue can be opened for input by multiple applications."
    },
    "defaultInputOpenOption": {
      "type": "string",
      "enum": ["shared", "exclusive"],
      "default": "shared",
      "description": "Default input open option."
    },
    "messagePriority": {
      "type": "object",
      "description": "Message priority settings.",
      "properties": {
        "default": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9,
          "description": "Default message priority."
        },
        "deliverySequence": {
          "type": "string",
          "enum": ["priority", "fifo"],
          "default": "priority",
          "description": "Message delivery sequence."
        }
      }
    },
    "status": {
      "type": "object",
      "description": "Runtime status information.",
      "readOnly": true,
      "properties": {
        "currentDepth": {
          "type": "integer",
          "description": "Current number of messages."
        },
        "openInputCount": {
          "type": "integer",
          "description": "Number of applications with the queue open for input."
        },
        "openOutputCount": {
          "type": "integer",
          "description": "Number of applications with the queue open for output."
        },
        "lastGetDateTime": {
          "type": "string",
          "format": "date-time",
          "description": "Date and time of the last successful get operation."
        },
        "lastPutDateTime": {
          "type": "string",
          "format": "date-time",
          "description": "Date and time of the last successful put operation."
        },
        "uncommittedMessages": {
          "type": "integer",
          "description": "Number of uncommitted messages."
        },
        "oldestMessageAge": {
          "type": "integer",
          "description": "Age of the oldest message in seconds."
        }
      }
    },
    "alias": {
      "type": "object",
      "description": "Alias queue properties (for alias queues).",
      "properties": {
        "targetQueue": {
          "type": "string",
          "description": "Target queue name that this alias resolves to."
        },
        "targetType": {
          "type": "string",
          "enum": ["queue", "topic"],
          "description": "Target object type."
        }
      }
    },
    "remote": {
      "type": "object",
      "description": "Remote queue properties (for remote queues).",
      "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."
        }
      }
    },
    "createdDate": {
      "type": "string",
      "format": "date-time",
      "description": "Date and time the queue was created."
    },
    "lastModified": {
      "type": "string",
      "format": "date-time",
      "description": "Date and time the queue was last modified."
    },
    "metadata": {
      "type": "object",
      "additionalProperties": true,
      "description": "Additional metadata associated with the queue."
    }
  },
  "required": ["name", "type"]
}
