{
  "type": "object",
  "properties": {
    "fp_id": {
      "type": "string",
      "pattern": "^[a-z0-9][a-z0-9_]*$"
    },
    "t2i_prompt": {
      "type": "string",
      "minLength": 30
    },
    "key_elements": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "numbered_elements": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "number": {
            "type": "integer",
            "minimum": 1
          },
          "label": {
            "type": "string",
            "minLength": 2
          },
          "category": {
            "type": "string",
            "enum": [
              "furniture",
              "opening",
              "prop",
              "area"
            ]
          },
          "position_hint": {
            "type": "string",
            "minLength": 5
          },
          "base_layer_decision": {
            "type": "string",
            "enum": [
              "base_structural_unit",
              "base_opening",
              "base_persistent_fixture",
              "base_persistent_furniture",
              "state_overlay_plot_cue",
              "state_overlay_transient_object"
            ]
          }
        },
        "required": [
          "number",
          "label",
          "category",
          "position_hint",
          "base_layer_decision"
        ],
        "additionalProperties": false
      }
    },
    "camera_recommendations": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "bg_id": {
            "type": "string",
            "pattern": "^L\\d{2,3}B\\d{2,3}$"
          },
          "sub_location": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9_]*$"
          },
          "camera_position": {
            "type": "string",
            "minLength": 10
          },
          "camera_height": {
            "type": "string",
            "minLength": 5
          },
          "lens_hint": {
            "type": "string",
            "minLength": 3
          },
          "framing_notes": {
            "type": "string"
          },
          "use_numbered_elements": {
            "type": "array",
            "items": {
              "type": "integer",
              "minimum": 1
            }
          },
          "ignore_numbered_elements": {
            "type": "array",
            "items": {
              "type": "integer",
              "minimum": 1
            }
          }
        },
        "required": [
          "bg_id",
          "sub_location",
          "camera_position",
          "camera_height",
          "lens_hint",
          "framing_notes",
          "use_numbered_elements",
          "ignore_numbered_elements"
        ],
        "additionalProperties": false
      }
    },
    "scale_guideline": {
      "type": "string",
      "minLength": 30
    }
  },
  "required": [
    "fp_id",
    "t2i_prompt",
    "key_elements",
    "numbered_elements",
    "camera_recommendations",
    "scale_guideline"
  ],
  "additionalProperties": false
}
