<?php
namespace nur\data\types;

use nur\b\ui\IContent;
use nur\b\ui\IPrintable;

class ContentType extends AbstractSimpleType {
  const TITLE = "contenu à afficher";

  const TRIM = false;

  /** @var string description de la valeur */
  const KIND = "content";

  function getClass(): string {
    # on est malheureusement obligé de mettre mixed, mais en réalité, il peut
    # s'agir des types suivants: scalar (string, int, etc.), iterable,
    # IPrintable, IContent
    return "mixed";
  }

  function isInstance($value, bool $strict=false): bool {
    if (is_iterable($value)) {
      $values = $value;
      foreach ($values as $value) {
        if (!$this->isInstance($value)) return false;
      }
      return true;
    }
    return $value === null ||
      is_scalar($value) ||
      $value instanceof IPrintable ||
      $value instanceof IContent;
  }

  function parse(string &$input) {
    return $input;
  }

  function verifixReplaceEmpty(&$value): void {
  }
}
