{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://usemakoto.dev/schema/v0.2/profile-reference.schema.json",
  "title": "Makoto v0.2 Profile Reference",
  "$ref": "#/$defs/profileReference",
  "$defs": {
    "digest": {
      "type": "object",
      "required": ["sha256"],
      "properties": {
        "sha256": { "type": "string", "minLength": 64, "maxLength": 64 }
      },
      "additionalProperties": false
    },
    "resource": {
      "type": "object",
      "required": ["id", "digest"],
      "properties": {
        "id": { "type": "string", "minLength": 1, "maxLength": 4096 },
        "digest": { "$ref": "#/$defs/digest" }
      },
      "additionalProperties": false
    },
    "profileReference": {
      "type": "object",
      "required": ["id", "digest", "closureDigest", "target", "critical", "resources"],
      "properties": {
        "id": { "type": "string", "minLength": 1, "maxLength": 4096 },
        "digest": { "$ref": "#/$defs/digest" },
        "closureDigest": { "$ref": "#/$defs/digest" },
        "target": { "enum": ["statement", "predicate", "artifact"] },
        "subjectName": { "type": "string", "minLength": 1, "maxLength": 4096 },
        "mediaType": {
          "type": "string",
          "maxLength": 255
        },
        "critical": { "type": "boolean" },
        "resources": {
          "type": "array",
          "items": { "$ref": "#/$defs/resource" }
        }
      },
      "allOf": [
        {
          "if": { "properties": { "target": { "const": "artifact" } }, "required": ["target"] },
          "then": { "required": ["subjectName", "mediaType"] },
          "else": {
            "properties": {
              "subjectName": false,
              "mediaType": false
            }
          }
        }
      ],
      "additionalProperties": false
    }
  }
}
