{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://json.schemastore.org/usf.json",
  "title": "Universal Schedule Format (USF)",
  "description": "A compact and efficient format for storing school schedules.",
  "type": "object",
  "properties": {
    "version": {
      "type": "integer",
      "description": "USF version"
    },
    "subjects": {
      "type": "object",
      "additionalProperties": {
        "type": "object",
        "properties": {
          "simplified_name": { "type": "string" },
          "teacher": { "type": "string" },
          "room": { "type": "string" }
        },
        "additionalProperties": false
      },
      "description": "Mapping of subject names to their details."
    },
    "periods": {
      "type": "array",
      "items": {
        "type": "array",
        "items": [
          {
            "type": "string",
            "pattern": "^(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d$"
          },
          {
            "type": "string",
            "pattern": "^(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d$"
          }
        ],
        "minItems": 2,
        "maxItems": 2
      },
      "description": "List of time periods, each containing a start and end time."
    },
    "timetable": {
      "type": "array",
      "items": {
        "type": "array",
        "items": [
          {
            "type": "integer",
            "minimum": 1,
            "maximum": 7,
            "description": "Day of the week (1=Monday, 7=Sunday)."
          },
          {
            "type": "string",
            "enum": ["all", "even", "odd"],
            "description": "Week type."
          },
          {
            "type": "string",
            "description": "Subject name (must match keys in 'subjects')."
          },
          {
            "type": "integer",
            "minimum": 1,
            "description": "Class period (1-based index, must match 'periods')."
          }
        ],
        "minItems": 4,
        "maxItems": 4
      },
      "description": "Schedule entries, each defining a class occurrence."
    }
  },
  "required": ["version", "subjects", "periods", "timetable"],
  "additionalProperties": false
}