{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://danklinux.com/schemas/plugin.json",
  "title": "DankMaterialShell Plugin Manifest",
  "description": "Schema for DankMaterialShell plugin.json manifest files",
  "type": "object",
  "required": [
    "id",
    "name",
    "description",
    "version",
    "author",
    "type",
    "capabilities"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Unique plugin identifier (camelCase, no spaces)",
      "pattern": "^[a-zA-Z][a-zA-Z0-9]*$"
    },
    "name": {
      "type": "string",
      "description": "Human-readable plugin name",
      "minLength": 1
    },
    "description": {
      "type": "string",
      "description": "Short description of plugin functionality",
      "minLength": 1
    },
    "version": {
      "type": "string",
      "description": "Semantic version string (e.g., '1.0.0')",
      "pattern": "^\\d+\\.\\d+\\.\\d+(-[a-zA-Z0-9.-]+)?(\\+[a-zA-Z0-9.-]+)?$"
    },
    "author": {
      "type": "string",
      "description": "Plugin creator name or email",
      "minLength": 1
    },
    "type": {
      "type": "string",
      "description": "Plugin type. Use 'composite' (or any value) together with 'components' to provide multiple surfaces from one plugin.",
      "enum": ["widget", "daemon", "launcher", "desktop", "composite"]
    },
    "capabilities": {
      "type": "array",
      "description": "Array of plugin capabilities",
      "items": {
        "type": "string"
      },
      "minItems": 1
    },
    "component": {
      "type": "string",
      "description": "Relative path to main QML component file. Required unless 'components' is provided.",
      "pattern": "^\\./.*\\.qml$"
    },
    "components": {
      "type": "object",
      "description": "Map of surface name to relative QML component path, for multi-surface (composite) plugins. Provide any subset of surfaces; each is loaded independently.",
      "properties": {
        "widget": {
          "type": "string",
          "description": "Bar/Control Center widget component (PluginComponent)",
          "pattern": "^\\./.*\\.qml$"
        },
        "desktop": {
          "type": "string",
          "description": "Desktop widget component",
          "pattern": "^\\./.*\\.qml$"
        },
        "daemon": {
          "type": "string",
          "description": "Background daemon component (instantiated once)",
          "pattern": "^\\./.*\\.qml$"
        },
        "launcher": {
          "type": "string",
          "description": "Launcher provider component (requires 'trigger')",
          "pattern": "^\\./.*\\.qml$"
        }
      },
      "additionalProperties": false,
      "minProperties": 1
    },
    "trigger": {
      "type": "string",
      "description": "Trigger string for launcher activation (required for launcher type)"
    },
    "icon": {
      "type": "string",
      "description": "Material Design icon name"
    },
    "settings": {
      "type": "string",
      "description": "Path to settings component QML file",
      "pattern": "^\\./.*\\.qml$"
    },
    "startupCheck": {
      "type": "string",
      "description": "Path to a non-visual (QtObject) component exposing a check(done) function that gates activation. done(null) allows; done(error) blocks, where error is a string or { title, details }.",
      "pattern": "^\\./.*\\.qml$"
    },
    "requires_dms": {
      "type": "string",
      "description": "Minimum DMS version requirement (e.g., '>=0.1.18', '>0.1.0')",
      "pattern": "^(>=?|<=?|=|>|<)\\d+\\.\\d+\\.\\d+$"
    },
    "dependencies": {
      "type": "array",
      "description": "Array of required system tools/dependencies (registry metadata)",
      "items": {
        "type": "string"
      }
    },
    "requires": {
      "type": "array",
      "description": "Deprecated alias for 'dependencies'.",
      "items": {
        "type": "string"
      }
    },
    "permissions": {
      "type": "array",
      "description": "Required capabilities",
      "items": {
        "type": "string",
        "enum": [
          "settings_read",
          "settings_write",
          "process",
          "network"
        ]
      }
    }
  },
  "allOf": [
    {
      "if": {
        "properties": {
          "type": {
            "const": "launcher"
          }
        }
      },
      "then": {
        "required": ["trigger"]
      }
    },
    {
      "if": {
        "required": ["components"],
        "properties": {
          "components": {
            "required": ["launcher"]
          }
        }
      },
      "then": {
        "required": ["trigger"]
      }
    },
    {
      "anyOf": [
        {
          "required": ["component"]
        },
        {
          "required": ["components"]
        }
      ]
    }
  ],
  "additionalProperties": true
}
