{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://example.local/schemas/layout.schema.json",
  "title": "Architecture diagram layout",
  "type": "object",
  "additionalProperties": false,
  "required": ["schemaVersion", "canvas", "nodes", "edges"],
  "properties": {
    "$schema": { "type": "string" },
    "schemaVersion": { "const": "1.0" },
    "canvas": {
      "type": "object",
      "additionalProperties": false,
      "required": ["width", "height"],
      "properties": {
        "width": { "type": "integer", "minimum": 320, "maximum": 10000 },
        "height": { "type": "integer", "minimum": 240, "maximum": 10000 }
      }
    },
    "boundaries": {
      "type": "object",
      "additionalProperties": { "$ref": "#/$defs/boundaryGeometry" }
    },
    "nodes": {
      "type": "object",
      "additionalProperties": { "$ref": "#/$defs/nodeGeometry" }
    },
    "edges": {
      "type": "object",
      "additionalProperties": { "$ref": "#/$defs/edgeGeometry" }
    }
  },
  "$defs": {
    "point": {
      "type": "object",
      "additionalProperties": false,
      "required": ["x", "y"],
      "properties": {
        "x": { "type": "number", "minimum": 0, "maximum": 10000 },
        "y": { "type": "number", "minimum": 0, "maximum": 10000 }
      }
    },
    "port": {
      "type": "object",
      "additionalProperties": false,
      "required": ["side", "offset"],
      "properties": {
        "side": { "enum": ["top", "right", "bottom", "left"] },
        "offset": { "type": "number", "minimum": 0, "maximum": 1 }
      }
    },
    "nodeGeometry": {
      "type": "object",
      "additionalProperties": false,
      "required": ["x", "y", "width", "height"],
      "properties": {
        "x": { "type": "number", "minimum": 0, "maximum": 10000 },
        "y": { "type": "number", "minimum": 0, "maximum": 10000 },
        "width": { "type": "number", "minimum": 40, "maximum": 3000 },
        "height": { "type": "number", "minimum": 30, "maximum": 3000 }
      }
    },
    "boundaryGeometry": {
      "type": "object",
      "additionalProperties": false,
      "required": ["x", "y", "width", "height"],
      "properties": {
        "x": { "type": "number", "minimum": 0, "maximum": 10000 },
        "y": { "type": "number", "minimum": 0, "maximum": 10000 },
        "width": { "type": "number", "minimum": 120, "maximum": 10000 },
        "height": { "type": "number", "minimum": 80, "maximum": 10000 }
      }
    },
    "edgeGeometry": {
      "type": "object",
      "additionalProperties": false,
      "required": ["source", "target"],
      "properties": {
        "source": { "$ref": "#/$defs/port" },
        "target": { "$ref": "#/$defs/port" },
        "waypoints": {
          "type": "array",
          "maxItems": 20,
          "items": { "$ref": "#/$defs/point" }
        },
        "label": { "$ref": "#/$defs/point" }
      }
    }
  }
}
