{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://weekkeep.local/schema/journal-v3",
  "type": "object",
  "properties": {
    "version": {
      "const": 3
    },
    "profile": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "maxLength": 60
        },
        "birthDate": {
          "type": "string",
          "format": "date"
        },
        "horizon": {
          "type": "integer",
          "minimum": 1,
          "maximum": 200
        }
      },
      "required": [
        "name",
        "birthDate",
        "horizon"
      ],
      "additionalProperties": false
    },
    "entries": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1
          },
          "date": {
            "type": "string",
            "format": "date"
          },
          "title": {
            "type": "string"
          },
          "text": {
            "type": "string"
          },
          "memory": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "location": {
            "anyOf": [
              {
                "type": "null"
              },
              {
                "dependentRequired": {
                  "latitude": [
                    "longitude"
                  ],
                  "longitude": [
                    "latitude"
                  ]
                },
                "type": "object",
                "properties": {
                  "label": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 250
                  },
                  "source": {
                    "enum": [
                      "manual",
                      "photon",
                      "browser"
                    ]
                  },
                  "latitude": {
                    "type": "number",
                    "minimum": -90,
                    "maximum": 90
                  },
                  "longitude": {
                    "type": "number",
                    "minimum": -180,
                    "maximum": 180
                  },
                  "city": {
                    "type": "string",
                    "maxLength": 100
                  },
                  "country": {
                    "type": "string",
                    "maxLength": 100
                  }
                },
                "required": [
                  "label",
                  "source"
                ],
                "additionalProperties": false
              }
            ]
          }
        },
        "required": [
          "id",
          "date",
          "title",
          "text",
          "memory",
          "createdAt"
        ],
        "additionalProperties": false
      }
    },
    "lived": {
      "type": "object",
      "propertyNames": {
        "type": "string",
        "format": "date"
      },
      "additionalProperties": {
        "type": "boolean"
      }
    },
    "closures": {
      "type": "object",
      "propertyNames": {
        "type": "string",
        "format": "date"
      },
      "additionalProperties": {
        "type": "object",
        "properties": {
          "memory": {
            "type": "string",
            "minLength": 1
          },
          "experiment": {
            "type": "string"
          }
        },
        "required": [
          "memory",
          "experiment"
        ],
        "additionalProperties": false
      }
    },
    "compass": {
      "type": "object",
      "properties": {
        "values": {
          "type": "string"
        },
        "calls": {
          "type": "string"
        },
        "chapter": {
          "type": "string"
        },
        "experiment": {
          "type": "string"
        }
      },
      "required": [
        "values",
        "calls",
        "chapter",
        "experiment"
      ],
      "additionalProperties": false
    },
    "acknowledged": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "uniqueItems": true
    }
  },
  "required": [
    "version",
    "profile",
    "entries",
    "lived",
    "closures",
    "compass",
    "acknowledged"
  ],
  "additionalProperties": false
}
