{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://example.com/wo.schema.json",
  "title": "Wewnątrzszkolne Ocenianie Schema",
  "description": "Schema walidująca dokument wo.json opisujący wewnątrzszkolne zasady oceniania.",
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "description": "Tytuł główny dokumentu, np. 'WEWNĄTRZSZKOLNE OCENIANIE'."
    },
    "subtitle": {
      "type": "string",
      "description": "Podtytuł dokumentu lub dodatkowa informacja, np. 'Załącznik Nr 2...'."
    },
    "institution": {
      "type": "string",
      "description": "Nazwa instytucji (szkoły)."
    },
    "legal_basis": {
      "type": "array",
      "description": "Lista podstaw prawnych wraz z opisami.",
      "items": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "description": "Tytuł podstawy prawnej (np. nazwa ustawy lub rozporządzenia)."
          },
          "description": {
            "type": "string",
            "description": "Opis lub rozwinięcie podstawy prawnej."
          }
        },
        "required": ["title"],
        "additionalProperties": false
      }
    },
    "authors": {
      "type": "array",
      "description": "Lista autorów dokumentu.",
      "items": {
        "type": "string"
      }
    },
    "sections": {
      "type": "array",
      "description": "Tablica rozdziałów (sekcji) dokumentu.",
      "items": {
        "$ref": "#/definitions/section"
      },
      "minItems": 1
    }
  },
  "required": ["title", "institution", "sections"],
  "additionalProperties": false,

  "definitions": {
    "section": {
      "type": "object",
      "description": "Obiekt reprezentujący rozdział/sekcję w dokumencie.",
      "properties": {
        "nr": {
          "type": "integer",
          "description": "Numer rozdziału (kolejność)."
        },
        "title": {
          "type": "string",
          "description": "Tytuł rozdziału."
        },
        "description": {
          "type": "string",
          "description": "Krótka charakterystyka/typ rozdziału (np. 'rozdział')."
        },
        "details": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "array",
              "items": { "type": "string" }
            }
          ],
          "description": "Treść opisowa (może być single string lub tablica stringów)."
        },
        "law": {
          "type": "array",
          "description": "Tablica podstaw prawnych odnoszących się do tego rozdziału.",
          "items": {
            "type": "string"
          }
        },
        "items": {
          "type": "array",
          "description": "Podrzędne elementy (np. paragrafy).",
          "items": {
            "$ref": "#/definitions/item"
          }
        }
      },
      "required": ["nr", "title", "items"],
      "additionalProperties": false
    },
    "item": {
      "type": "object",
      "description": "Obiekt reprezentujący paragraf/punkt/podpunkt w danym rozdziale.",
      "properties": {
        "nr": {
          "type": "integer",
          "description": "Numer elementu (np. nr paragrafu, punktu)."
        },
        "title": {
          "type": "string",
          "description": "Tytuł elementu (np. '§ 1. Zakres...')."
        },
        "description": {
          "type": "string",
          "description": "Krótki opis typu elementu (np. 'paragraf', 'punkt', 'letter')."
        },
        "details": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "array",
              "items": { "type": "string" }
            }
          ],
          "description": "Treść opisowa (może być single string lub tablica stringów)."
        },
        "law": {
          "type": "array",
          "description": "Tablica podstaw prawnych odnoszących się do danego elementu.",
          "items": {
            "type": "string"
          }
        },
        "items": {
          "type": "array",
          "description": "Lista kolejnych zagnieżdżonych elementów (punktów, podpunktów).",
          "items": {
            "$ref": "#/definitions/item"
          }
        }
      },
      "required": ["nr", "title", "items"],
      "additionalProperties": false
    }
  }
}

