{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "config.json",
  "title": "JSON Schema for UBLO v2 config",
  "description": "UBLO v2 config declaration linter",
  "type": "object",
  "properties": {
    "$schema": { "type": "string" },
    "formats": {
      "type": "string",
      "description": "Chemin d'accès vers le fichier de définition des formats"
    },
    "iconsSprite": {
      "type": "string",
      "description": "Chemin d'accès vers le fichier de contenant les pictos chargés par le IconFormat"
    },
    "pagesMetadata": {
      "type": "array",
      "description": "Alimente l'onglet \"Avancé\" de l'éditeur de structure avec différents champs. Ces champs permettent d'enregistrer des informations diverses au niveau d'un noeud d'arborescence spécifique.",
      "items": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": ["text", "checkbox", "select"],
            "description": "Type du champ. \"text\" : champs texte libre. \"checkox\" : case à cocher (génère un boolean en base). \"select\" : champs avec une liste d'options prédéfinies."
          },
          "code": {
            "type": "string",
            "pattern": "[a-z]+[A-Z][a-zA-Z]*",
            "description": "Nom de la variable qui sera exposée dans l'objet \"metadata\". Doit impérativement en camelCase sans espaces"
          },
          "label": { "type": "string", "description": "Libellé du champ" }
        },
        "if": {
          "properties": {
            "type": { "const": "select" }
          }
        },
        "then": {
          "properties": {
            "options": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Liste des options possibles pour le select"
              }
            }
          }
        },
        "required": ["type", "code", "label"]
      }
    },
    "styles": {
      "type": "object",
      "description": "Permet d'agrémenter les options de formatage des RichTextFormat",
      "properties": {
        "color": {
          "type": "array",
          "description": "Couleurs de textes autorisées",
          "items": {
            "type": ["object", "string"],
            "properties": {
              "name": { "type": "string" },
              "value": { "type": "string" }
            }
          }
        },
        "background": {
          "type": "array",
          "description": "Fonds de couleur de textes autorisées",
          "items": {
            "type": "object",
            "properties": {
              "name": { "type": "string" },
              "value": { "type": "string" }
            }
          }
        },
        "size": {
          "type": "array",
          "description": "Tailles de textes autorisées",
          "items": {
            "type": ["object", "string"],
            "properties": {
              "name": { "type": "string" },
              "value": { "type": "string" }
            }
          }
        },
        "weight": {
          "type": "array",
          "description": "Gresses de textes autorisées",
          "items": {
            "type": ["object", "string"],
            "properties": {
              "name": { "type": "string" },
              "value": { "type": "string" }
            }
          }
        },
        "family": {
          "type": "array",
          "description": "Familles de textes autorisées",
          "items": {
            "type": "object",
            "properties": {
              "name": { "type": "string" },
              "value": { "type": "string" }
            }
          }
        }
      },
      "additionalProperties": false
    },
    "esfcorner": {
      "type": "object",
      "properties": {
        "host": { "type": "string", "pattern": "^https?://" },
        "ecole": { "type": "string" }
      },
      "required": ["host"]
    },
    "filemanager": {
      "type": "object",
      "properties": {
        "url": { "type": "string", "pattern": "^https?://" },
        "token": { "type": "string" }
      },
      "required": ["url", "token"]
    },
    "cdn": { "type": "string" },
    "disablePageUi": {
      "type": "boolean",
      "description": "Désactive l'interface de page (boutons de sauvegarde, gestion d'arborescence, etc..."
    },
    "customStructure": {
      "type": "array",
      "description": "Fourni une structure d'arborescence personnalisée dans l'interface d'insertion de liens (bouton lien interne)."
    }
  },
  "required": ["formats", "styles"]
}
