<?php
namespace nulib\schema;

use nulib\ref\schema\ref_schema;
use nulib\schema\input\Input;
use nulib\schema\types\IType;

class WrapperContext {

  function __construct(Schema $schema, ?Input $input, $valueKey, ?array $params) {
    $this->resetParams($params);
    $this->schema = $schema;
    if ($input !== null) $this->input = $input;
    $this->valueKey = $valueKey;
  }

  public ?array $params;
  public bool $analyze, $analyzed = false;
  public bool $normalize, $normalized = false;
  public ?bool $throw;

  function resetParams(?array $params): void {
    $this->params = $params;
    $this->analyze = $params["analyze"] ?? ref_schema::PARAMS_SCHEMA["analyze"][1];
    $this->normalize = $params["normalize"] ?? ref_schema::PARAMS_SCHEMA["normalize"][1];
    $this->throw = $params["throw"] ?? ref_schema::PARAMS_SCHEMA["throw"][1];
  }

  /** schéma de la valeur */
  public Schema $schema;
  /** source et destination de la valeur */
  public Input $input;
  /** @var string|int|null clé de la valeur dans le tableau destination */
  public $valueKey;
  /** @var mixed */
  public $origValue = null;
  /** @var mixed */
  public $value = null;

  /** type de la valeur de la clé sélectionnée après analyse */
  public ?IType $type = null;
  /** résultat de l'analyse de la valeur de la clé sélectionnée */
  public ?Result $result = null;
}
