<?php
namespace nur\sery\ref\schema;

class ref_schema {
  /** @var array schéma des natures de schéma */
  const NATURE_METASCHEMA = [
    "nature" => ["string", null, "nature du schéma",
      "pkey" => 0,
      "allowed_values" => ["assoc", "list", "scalar"],
    ],
    "title" => ["?string", null, "libellé de la valeur"],
    "required" => ["bool", false, "la valeur est-elle requise?"],
    "nullable" => ["?bool", null, "la valeur peut-elle être nulle?"],
    "desc" => ["?content", null, "description de la valeur"],
    "name" => ["?key", null, "identifiant de la valeur"],
    "schema" => ["?array", null, "définition du schéma"],
  ];

  /** @var array meta-schema d'un schéma de nature scalaire */
  const SCALAR_METASCHEMA = [
    "type" => ["array", null, "types possibles de la valeur", "required" => true],
    "default" => [null, null, "valeur par défaut si la valeur n'existe pas"],
    "title" => ["?string", null, "libellé de la valeur"],
    "required" => ["bool", false, "la valeur est-elle requise?"],
    "nullable" => ["?bool", null, "la valeur peut-elle être nulle?"],
    "desc" => ["?content", null, "description de la valeur"],
    "analyzer_func" => ["?callable", null, "fonction qui analyse une valeur entrante et indique comment la traiter"],
    "extractor_func" => ["?callable", null, "fonction qui extrait la valeur à analyser dans une chaine de caractère"],
    "parser_func" => ["?callable", null, "fonction qui analyse une chaine de caractères pour produire la valeur"],
    "normalizer_func" => ["?callable", null, "fonction qui normalise la valeur"],
    "messages" => ["?array", null, "messages à afficher en cas d'erreur d'analyse"],
    "formatter_func" => ["?callable", null, "fonction qui formatte la valeur pour affichage"],
    "format" => [null, null, "format à utiliser pour l'affichage"],
    "" => ["array", "scalar", "nature du schéma",
      "" => ["assoc", "schema" => self::NATURE_METASCHEMA],
    ],
    "name" => ["?string", null, "identifiant de la valeur"],
    "pkey" => ["?pkey", null, "chemin de clé de la valeur dans un tableau associatif"],
    "header" => ["?string", null, "nom de l'en-tête s'il faut présenter cette donnée dans un tableau"],
    "composite" => ["?bool", null, "ce champ fait-il partie d'une valeur composite?"],
  ];

  const MESSAGES = [
    "missing" => "{key}: Vous devez spécifier cette valeur",
    "unavailable" => "{key}: Vous devez spécifier cette valeur",
    "null" => "{key}: cette valeur ne doit pas être nulle",
    "empty" => "{key}: cette valeur ne doit pas être vide",
    "invalid" => "{key}: {orig}: cette valeur est invalide",
  ];

  /** @var array meta-schema d'un schéma de nature associative */
  const ASSOC_METASCHEMA = [
  ];

  /** @var array meta-schema d'un schéma de nature liste */
  const LIST_METASCHEMA = [
  ];
}
