{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://docs.flashnerd.com/examples/flashnerd-format/schemas/srs_settings.schema.json",
  "title": "Portable SRS settings",
  "type": "object",
  "additionalProperties": true,
  "properties": {
    "version": { "type": "integer", "default": 1 },
    "cardDisplay": {
      "type": "object",
      "additionalProperties": true,
      "properties": {
        "showTag": { "type": "boolean" },
        "showSrsState": { "type": "boolean" },
        "showStruggleStatus": { "type": "boolean" },
        "struggleThreshold": { "type": "integer" },
        "recoveryThreshold": { "type": "integer" }
      }
    },
    "reviewBehavior": {
      "type": "object",
      "additionalProperties": true,
      "properties": {
        "maximumLoggedTime": { "type": "integer" },
        "reviewButtonDisplay": { "enum": ["twoButtons", "fourButtons"] },
        "showElapsedTime": { "type": "boolean" },
        "autoAdvance": { "type": "boolean" },
        "timeBeforeShowingAnswer": { "type": "integer" },
        "timeBeforeNextCard": { "type": "integer" },
        "noAnswerRating": { "type": "integer", "enum": [1, 2, 3, 4] }
      }
    },
    "dailyLimits": {
      "type": "object",
      "additionalProperties": true,
      "properties": {
        "maximumReviewsPerDay": { "type": "integer" },
        "newCardsPerDay": { "type": "integer" },
        "suspendedCardsPerDay": { "type": "integer" },
        "maximumReviewsCustomScheduling": { "type": "boolean" },
        "newCardsCustomScheduling": { "type": "boolean" },
        "newCardsIgnoreReviewLimit": { "type": "boolean" },
        "suspendedCardsCustomScheduling": { "type": "boolean" },
        "suspendedCardsIgnoreReviewLimit": { "type": "boolean" },
        "maximumReviewsPerWeekday": {
          "type": "array",
          "minItems": 7,
          "maxItems": 7,
          "items": { "type": "integer" },
          "description": "Monday first."
        },
        "newCardsPerWeekday": {
          "type": "array",
          "minItems": 7,
          "maxItems": 7,
          "items": { "type": "integer" },
          "description": "Monday first."
        },
        "suspendedCardsPerWeekday": {
          "type": "array",
          "minItems": 7,
          "maxItems": 7,
          "items": { "type": "integer" },
          "description": "Monday first."
        }
      }
    },
    "displayOrder": {
      "type": "object",
      "additionalProperties": true,
      "properties": {
        "cardPriorityGroups": {
          "type": "array",
          "items": {
            "type": "array",
            "items": {
              "enum": ["new", "learning", "relearning", "review", "suspended"]
            }
          }
        },
        "deckOrderMode": { "enum": ["sequential", "random"] }
      }
    },
    "schedulingAlgorithm": {
      "type": "object",
      "additionalProperties": true,
      "properties": {
        "desiredRetentionPercent": { "type": "integer" },
        "maximumIntervalDays": { "type": "integer" },
        "learningSteps": { "$ref": "#/$defs/learningSteps" },
        "relearningSteps": { "$ref": "#/$defs/learningSteps" }
      }
    },
    "advanced": {
      "type": "object",
      "additionalProperties": true,
      "properties": {
        "parametersCsv": { "type": "string" }
      }
    }
  },
  "$defs": {
    "learningSteps": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true,
        "required": ["value", "unit"],
        "properties": {
          "value": { "type": "integer" },
          "unit": { "enum": ["min", "hour", "day"] }
        }
      }
    }
  }
}
