<?php
namespace nur\sery\php\content;

use nur\sery\php\func;

/**
 * Class Printer: wrapper autour d'une instance de {@link IContent} qui affiche
 * le contenu au lieu de le retourner
 *
 * cette classe est conçue pour wrapper des objets complexes dont le contenu est
 * contruit au fur et à mesure: ainsi, les objets peuvent être utilisés tels
 * quels dans un contenu, ou alors être wrappés si on veut simplement les
 * afficher
 */
class Printer implements IPrintable {
  function __construct(IContent $content) {
    $this->content = $content;
  }

  protected IContent $content;

  function print(): void {
    $content = $this->content->getContent();
    c::write($content);
  }

  function __call($name, $args) {
    $content = func::call([$this->content, $name], ...$args);
    c::write($content);
  }
}
