{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://pitgun.io/schemas/analysis-manifest/v2",
  "title": "Pitgun Analysis Manifest v2",
  "type": "object",
  "additionalProperties": false,
  "required": ["manifest_version", "analysis", "datasets", "plan", "outputs"],
  "properties": {
    "manifest_version": {
      "type": "integer",
      "enum": [2]
    },
    "analysis": {
      "type": "object",
      "additionalProperties": false,
      "required": ["id"],
      "properties": {
        "id": { "type": "string", "minLength": 1 },
        "description": { "type": "string" },
        "domain": { "type": "string" }
      }
    },
    "datasets": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": ["id", "kind"],
        "properties": {
          "id": { "type": "string", "minLength": 1 },
          "kind": {
            "type": "string",
            "enum": ["stream", "historical", "other"]
          },
          "description": { "type": "string" }
        }
      }
    },
    "plan": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "use_bundle": {
            "type": "object",
            "additionalProperties": false,
            "required": ["name", "version", "bolts"],
            "properties": {
              "name": { "type": "string", "minLength": 1 },
              "version": { "type": "string", "minLength": 1 },
              "bolts": {
                "type": "array",
                "minItems": 1,
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": ["id"],
                  "properties": {
                    "id": { "type": "string", "minLength": 1 },
                    "params": {
                      "type": "object",
                      "additionalProperties": true
                    }
                  }
                }
              }
            }
          }
        },
        "oneOf": [
          { "required": ["use_bundle"] }
        ]
      }
    },
    "outputs": {
      "type": "array",
      "minItems": 1,
      "items": { "type": "string", "minLength": 1 },
      "uniqueItems": true
    }
  }
}
