<?php
namespace nur\v\model;

use nur\b\coll\BaseArray;
use Throwable;

/**
 * Class IPageContainer: un conteneur de page, de composants et de plugins, qui
 * se charge de les organiser et de les afficher
 */
interface IPageContainer {
  /** obtenir la configuration courante */
  function getConfig(): array;

  /** obtenir les paramètres partagés */
  function getParams(): BaseArray;

  /**
   * Enregistrer un composant ou un plugin, en le nommant éventuellement.
   * Retourner l'instance ajoutée
   */
  function addPlugin($plugin, ?string $name=null): IPlugin;

  /** spécifier le composant de page à afficher */
  function setPage(IPage $page): void;

  /** retourner true si cet objet a commencé à afficher ses composants */
  function haveOutput(): bool;

  /** tester si la page cournte est en erreur */
  function haveError(): bool;

  /** spécifier l'erreur pour la page courante */
  function setError(?string $message, ?Throwable $exception=null): void;

  /** @return array|null l'erreur courante */
  function getError(): ?array;

  /** afficher la page */
  function print(): void;
}
