<?php
namespace nur\v\model;

/**
 * Interface IComponent: composant affichable avec un cycle de vie et des
 * resources associées
 */
interface IComponent extends IPlugin {
  ##

  /** préparer les objets dont a besoin ce composant pour s'initialiser */
  function beforePrepare(): void;

  /** préparer les objets dont a besoin ce composant pour s'initialiser */
  function prepare(): void;

  /** marquer le composant comme préparé */
  function afterPrepare(): void;

  /** tester si le composant a déjà été préparé */
  function didPrepare(): bool;

  ##

  /** fournir à ce composant les paramètres courants */
  function beforeConfig(array &$config): void;

  /** fournir à ce composant les paramètres courants */
  function config(array &$config): void;

  /** marquer les paramètres comme synchronisés */
  function afterConfig(): void;

  /** tester si les paramètres ont été synchronisés */
  function didConfig(): bool;

  /** obtenir une valeur de la configuration */
  function configGet(string $name);

  ##

  /** initialiser le composant */
  function beforeSetup(): void;

  /** initialiser le composant */
  function setup();

  /** marquer le composant comme initialisé */
  function afterSetup(): void;

  /** tester si le composant a déjà été initialisé */
  function didSetup(): bool;

  ##

  /**
   * ce composant affiche-t-il un contenu?
   *
   * si cette méthode retourne false, seule l'initialisation du composant est
   * effectuée.
   */
  function haveContent(): bool;

  ##

  /** libérer les resources utilisées par le composant */
  function beforeTeardown(): void;

  /** libérer les resources utilisées par le composant */
  function teardown(): void;

  /** marquer le composant comme libéré */
  function afterTeardown(): void;

  /** tester si le composant a déjà été libéré */
  function didTeardown(): bool;
}
