{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://sakura2333.dev/kancolle-data/equipment-acquisition.schema.json",
  "title": "KanColle equipment acquisition record (schema 1)",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "equipmentId",
    "equipmentName",
    "methods"
  ],
  "properties": {
    "equipmentId": {
      "type": "integer",
      "minimum": 1
    },
    "equipmentName": {
      "type": "string",
      "minLength": 1
    },
    "methods": {
      "type": "array",
      "minItems": 4,
      "maxItems": 4,
      "description": "Canonical build emits ship, upgrade, quest, development in this order; consumers must discriminate by kind.",
      "items": {
        "oneOf": [
          {
            "$ref": "#/$defs/ship"
          },
          {
            "$ref": "#/$defs/upgrade"
          },
          {
            "$ref": "#/$defs/quest"
          },
          {
            "$ref": "#/$defs/development"
          }
        ]
      },
      "allOf": [
        {
          "contains": {
            "$ref": "#/$defs/ship"
          },
          "minContains": 1,
          "maxContains": 1
        },
        {
          "contains": {
            "$ref": "#/$defs/upgrade"
          },
          "minContains": 1,
          "maxContains": 1
        },
        {
          "contains": {
            "$ref": "#/$defs/quest"
          },
          "minContains": 1,
          "maxContains": 1
        },
        {
          "contains": {
            "$ref": "#/$defs/development"
          },
          "minContains": 1,
          "maxContains": 1
        }
      ]
    }
  },
  "$defs": {
    "ship": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "kind",
        "shipIds"
      ],
      "properties": {
        "kind": {
          "const": "ship"
        },
        "shipIds": {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": 1
          },
          "uniqueItems": true
        }
      }
    },
    "upgrade": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "kind",
        "fromEquipmentIds"
      ],
      "properties": {
        "kind": {
          "const": "upgrade"
        },
        "fromEquipmentIds": {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": 1
          },
          "uniqueItems": true
        }
      }
    },
    "quest": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "kind",
        "questKeys"
      ],
      "properties": {
        "kind": {
          "const": "quest"
        },
        "questKeys": {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": 1
          },
          "uniqueItems": true
        }
      }
    },
    "development": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "kind",
        "available"
      ],
      "properties": {
        "kind": {
          "const": "development"
        },
        "available": {
          "type": "boolean"
        }
      }
    }
  }
}
