{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Place directory record public projection",
  "$defs": {
    "activity": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "status"
      ],
      "properties": {
        "status": {
          "enum": [
            "onSite",
            "nearbyOutfitter",
            "notOffered",
            "unconfirmed"
          ]
        },
        "outfitterName": {
          "type": "string",
          "minLength": 1
        },
        "distanceMiles": {
          "type": "number",
          "minimum": 0
        },
        "sourceUrl": {
          "$ref": "https://schemas.translatent.ai/place-directory-kit/place-core.schema.json#/$defs/sourceUrl"
        }
      },
      "allOf": [
        {
          "if": {
            "properties": {
              "status": {
                "const": "nearbyOutfitter"
              }
            }
          },
          "then": {
            "required": [
              "outfitterName",
              "sourceUrl"
            ]
          }
        },
        {
          "if": {
            "properties": {
              "status": {
                "not": {
                  "const": "unconfirmed"
                }
              }
            }
          },
          "then": {
            "required": [
              "sourceUrl"
            ]
          }
        }
      ]
    },
    "climbingActivity": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "status"
      ],
      "properties": {
        "status": {
          "enum": [
            "onSite",
            "nearbyOutfitter",
            "notOffered",
            "unconfirmed"
          ]
        },
        "outfitterName": {
          "type": "string",
          "minLength": 1
        },
        "distanceMiles": {
          "type": "number",
          "minimum": 0
        },
        "sourceUrl": {
          "$ref": "https://schemas.translatent.ai/place-directory-kit/place-core.schema.json#/$defs/sourceUrl"
        },
        "climbingType": {
          "enum": [
            "naturalRock",
            "viaFerrata",
            "wall"
          ]
        }
      },
      "allOf": [
        {
          "if": {
            "properties": {
              "status": {
                "const": "nearbyOutfitter"
              }
            }
          },
          "then": {
            "required": [
              "outfitterName",
              "sourceUrl"
            ]
          }
        },
        {
          "if": {
            "properties": {
              "status": {
                "not": {
                  "const": "unconfirmed"
                }
              }
            }
          },
          "then": {
            "required": [
              "sourceUrl"
            ]
          }
        }
      ]
    }
  },
  "oneOf": [
    {
      "type": "object",
      "allOf": [
        {
          "$ref": "https://schemas.translatent.ai/place-directory-kit/place-core.schema.json#/$defs/geo"
        },
        {
          "not": {
            "required": [
              "sourceValidity"
            ],
            "properties": {
              "sourceValidity": {
                "const": "unsupported"
              }
            }
          }
        }
      ],
      "additionalProperties": true,
      "required": [
        "housing",
        "activityRoster",
        "embedding",
        "embeddingHash"
      ],
      "properties": {
        "factsCheckedAt": {
          "$ref": "https://schemas.translatent.ai/place-directory-kit/place-core.schema.json#/$defs/factsCheckedAt"
        },
        "sourceValidity": {
          "enum": [
            "valid",
            "unsupported"
          ]
        },
        "generatedBy": {
          "$ref": "https://schemas.translatent.ai/place-directory-kit/place-core.schema.json#/$defs/generatedBy"
        },
        "sourceException": {
          "$ref": "https://schemas.translatent.ai/place-directory-kit/place-core.schema.json#/$defs/sourceException"
        },
        "sources": {
          "type": "array",
          "items": {
            "$ref": "https://schemas.translatent.ai/place-directory-kit/place-core.schema.json#/$defs/sourceUrl"
          }
        },
        "embedding": {
          "type": "array",
          "minItems": 384,
          "maxItems": 384,
          "items": {
            "type": "number"
          }
        },
        "embeddingHash": {
          "type": "string",
          "pattern": "^sha256:[a-f0-9]{64}$"
        },
        "housing": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "privacyVerdict",
            "selfCatering",
            "mealPlan",
            "sharingEverRequired",
            "sourceUrl"
          ],
          "properties": {
            "privacyVerdict": {
              "enum": [
                "private",
                "mixed",
                "fails"
              ]
            },
            "selfCatering": {
              "enum": [
                "fullKitchen",
                "kitchenette",
                "none",
                "unconfirmed"
              ]
            },
            "mealPlan": {
              "enum": [
                "allInclusive",
                "selfCatered",
                "mixed",
                "unconfirmed"
              ]
            },
            "sleepsMin": {
              "type": "integer",
              "minimum": 1
            },
            "sleepsMax": {
              "type": "integer",
              "minimum": 1
            },
            "bedroomsMin": {
              "type": "integer",
              "minimum": 0
            },
            "bedroomsMax": {
              "type": "integer",
              "minimum": 0
            },
            "sharingEverRequired": {
              "type": "boolean"
            },
            "qualifyingUnits": {
              "type": "string",
              "minLength": 1
            },
            "sourceUrl": {
              "$ref": "https://schemas.translatent.ai/place-directory-kit/place-core.schema.json#/$defs/sourceUrl"
            }
          }
        },
        "activityRoster": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "zipline": {
              "$ref": "#/$defs/activity"
            },
            "horseback": {
              "$ref": "#/$defs/activity"
            },
            "mountainBiking": {
              "$ref": "#/$defs/activity"
            },
            "whitewaterRafting": {
              "$ref": "#/$defs/activity"
            },
            "rockClimbing": {
              "$ref": "#/$defs/climbingActivity"
            }
          }
        },
        "ageFit": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "teenProgram",
            "sourceUrl"
          ],
          "properties": {
            "teenProgram": {
              "type": "boolean"
            },
            "sourceUrl": {
              "$ref": "https://schemas.translatent.ai/place-directory-kit/place-core.schema.json#/$defs/sourceUrl"
            }
          }
        },
        "season": {
          "type": "string",
          "minLength": 1
        }
      }
    },
    {
      "type": "object",
      "allOf": [
        {
          "$ref": "https://schemas.translatent.ai/place-directory-kit/place-core.schema.json#/$defs/geo"
        }
      ],
      "additionalProperties": true,
      "required": [
        "housing",
        "activityRoster",
        "embedding",
        "embeddingHash",
        "sourceValidity"
      ],
      "properties": {
        "sourceValidity": {
          "const": "unsupported"
        },
        "generatedBy": {
          "$ref": "https://schemas.translatent.ai/place-directory-kit/place-core.schema.json#/$defs/generatedBy"
        },
        "sourceException": {
          "$ref": "https://schemas.translatent.ai/place-directory-kit/place-core.schema.json#/$defs/sourceException"
        },
        "sources": {
          "type": "array",
          "items": {
            "$ref": "https://schemas.translatent.ai/place-directory-kit/place-core.schema.json#/$defs/sourceUrl"
          }
        },
        "embedding": {
          "type": "array",
          "minItems": 384,
          "maxItems": 384,
          "items": {
            "type": "number"
          }
        },
        "embeddingHash": {
          "type": "string",
          "pattern": "^sha256:[a-f0-9]{64}$"
        },
        "housing": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "privacyVerdict",
            "sharingEverRequired",
            "sourceUrl"
          ],
          "properties": {
            "privacyVerdict": {
              "enum": [
                "private",
                "mixed",
                "fails"
              ]
            },
            "sharingEverRequired": {
              "type": "boolean"
            },
            "qualifyingUnits": {
              "type": "string",
              "minLength": 1
            },
            "sourceUrl": {
              "$ref": "https://schemas.translatent.ai/place-directory-kit/place-core.schema.json#/$defs/sourceUrl"
            }
          }
        },
        "activityRoster": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "zipline": {
              "$ref": "#/$defs/activity"
            },
            "horseback": {
              "$ref": "#/$defs/activity"
            },
            "mountainBiking": {
              "$ref": "#/$defs/activity"
            },
            "whitewaterRafting": {
              "$ref": "#/$defs/activity"
            },
            "rockClimbing": {
              "$ref": "#/$defs/climbingActivity"
            }
          }
        },
        "ageFit": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "teenProgram",
            "sourceUrl"
          ],
          "properties": {
            "teenProgram": {
              "type": "boolean"
            },
            "sourceUrl": {
              "$ref": "https://schemas.translatent.ai/place-directory-kit/place-core.schema.json#/$defs/sourceUrl"
            }
          }
        },
        "season": {
          "type": "string",
          "minLength": 1
        }
      }
    }
  ]
}
