{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Mana Drops partner campaign preview payload",
  "description": "Illustrative, local-only website preview. Not an API request. Coordinates are prohibited, persistence is false, reward issuance is disabled, safety review is not run, and human approval remains required.",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "contractVersion",
    "mode",
    "persisted",
    "campaign"
  ],
  "properties": {
    "contractVersion": {
      "const": "1.0.0"
    },
    "mode": {
      "const": "illustrative-preview"
    },
    "persisted": {
      "const": false
    },
    "campaign": {
      "$ref": "#/$defs/campaign"
    }
  },
  "$defs": {
    "campaign": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "name",
        "goal",
        "reward",
        "venue",
        "zones",
        "lifecycle"
      ],
      "properties": {
        "name": {
          "type": "string",
          "maxLength": 60
        },
        "goal": {
          "enum": [
            "discovery",
            "challenge",
            "collection"
          ]
        },
        "reward": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "label",
            "issuance"
          ],
          "properties": {
            "label": {
              "type": "string",
              "maxLength": 60
            },
            "issuance": {
              "const": "disabled"
            }
          }
        },
        "venue": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "label",
            "location"
          ],
          "properties": {
            "label": {
              "const": "Sample venue"
            },
            "location": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "source",
                "coordinates"
              ],
              "properties": {
                "source": {
                  "const": "illustration"
                },
                "coordinates": {
                  "type": "null"
                }
              }
            }
          }
        },
        "zones": {
          "type": "array",
          "minItems": 3,
          "maxItems": 3,
          "items": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "kind",
              "geometry",
              "scalePercent"
            ],
            "properties": {
              "id": {
                "enum": [
                  "sample-play-zone",
                  "sample-no-play-area",
                  "sample-entrance"
                ]
              },
              "kind": {
                "enum": [
                  "play-zone",
                  "exclusion-zone",
                  "entry-point"
                ]
              },
              "geometry": {
                "const": "illustrative"
              },
              "scalePercent": {
                "type": "integer",
                "minimum": 80,
                "maximum": 120
              }
            }
          }
        },
        "lifecycle": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "state",
            "safetyReview",
            "humanApproval",
            "submitted"
          ],
          "properties": {
            "state": {
              "enum": [
                "draft-preview",
                "preview-checked"
              ]
            },
            "safetyReview": {
              "const": "not-run"
            },
            "humanApproval": {
              "const": "required"
            },
            "submitted": {
              "const": false
            }
          }
        }
      }
    }
  },
  "examples": [
    {
      "contractVersion": "1.0.0",
      "mode": "illustrative-preview",
      "persisted": false,
      "campaign": {
        "name": "Saturday at the park",
        "goal": "discovery",
        "reward": {
          "label": "Story badge",
          "issuance": "disabled"
        },
        "venue": {
          "label": "Sample venue",
          "location": {
            "source": "illustration",
            "coordinates": null
          }
        },
        "zones": [
          {
            "id": "sample-play-zone",
            "kind": "play-zone",
            "geometry": "illustrative",
            "scalePercent": 100
          },
          {
            "id": "sample-no-play-area",
            "kind": "exclusion-zone",
            "geometry": "illustrative",
            "scalePercent": 100
          },
          {
            "id": "sample-entrance",
            "kind": "entry-point",
            "geometry": "illustrative",
            "scalePercent": 100
          }
        ],
        "lifecycle": {
          "state": "draft-preview",
          "safetyReview": "not-run",
          "humanApproval": "required",
          "submitted": false
        }
      }
    }
  ]
}
