{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "title": { "type": "string" },
    "items": { "$ref": "#/$defs/items" },
    "required": ["title", "items"],
    "additionalProperties": false
  },
  "$defs": {
    "toggle": {
      "type": "object",
      "properties": {
        "entity": { "$ref": "#/$defs/entity" },
        "name": { "title": "Your familiar name", "type": "string" },
        "type": {
          "title": "Menu item type",
          "description": "One of 'tap, 'toggle' or 'group'.",
          "const": "toggle"
        }
      },
      "required": ["entity", "name", "type"],
      "additionalProperties": false
    },
    "tap": {
      "type": "object",
      "properties": {
        "entity": { "$ref": "#/$defs/entity" },
        "name": { "title": "Your familiar name", "type": "string" },
        "type": {
          "title": "Menu item type",
          "description": "One of 'tap, 'toggle' or 'group'.",
          "const": "tap"
        },
        "service": {
          "$ref": "#/$defs/entity",
          "deprecated": true,
          "title": "Schema change:",
          "description": "Use 'tap_action' instead to mirror Home Assistant."
        },
        "tap_action": { "$ref": "#/$defs/action" }
      },
      "oneOf": [
        { "required": ["entity", "name", "type", "service"] },
        { "required": ["entity", "name", "type", "tap_action"] }
      ],
      "additionalProperties": false
    },
    "menu": {
      "type": "object",
      "properties": {
        "entity": { "$ref": "#/$defs/entity" },
        "name": { "title": "Your familiar name", "type": "string" },
        "title": { "type": "string" },
        "type": {
          "title": "Menu item type",
          "description": "One of 'tap, 'toggle' or 'group'.",
          "const": "group"
        },
        "items": { "$ref": "#/$defs/items" }
      },
      "required": ["entity", "name", "title", "type", "items"],
      "additionalProperties": false
    },
    "items": {
      "type": "array",
      "items": {
        "oneOf": [
          { "$ref": "#/$defs/toggle" },
          { "$ref": "#/$defs/tap" },
          { "$ref": "#/$defs/menu" }
        ]
      }
    },
    "entity": {
      "title": "Home Assistant entity name",
      "type": "string",
      "pattern": "^[^.]+\\.[^.]+$"
    },
    "action": {
      "title": "Action",
      "description": "'confirm' field is optional.",
      "type": "object",
      "properties": {
        "service": { "$ref": "#/$defs/entity" },
        "confirm": {
          "type": "boolean",
          "default": false,
          "description": "Confirm the action before execution as a precaution."
        }
      },
      "required": ["service"]
    }
  }
}
