<?php
namespace nur\b\io;

use nur\A;

/**
 * Class CacheManager: un gestionnaire de cache permettant de désactiver la mise
 * en cache d'une valeur dans le cadre d'une session.
 *
 * en effet, si on désactive le cache, il doit être réactivé après que la valeur
 * est calculée, pour éviter qu'une valeur soit calculée encore et encore dans
 * une session de travail
 */
class CacheManager {
  function __construct() {
    $this->caches = [];
    $this->defaultCache = true;
  }

  /**
   * @var array tableau {id => cache} indiquant si l'élément id doit être mis en
   * cache
   */
  protected $caches;

  /**
   * @var bool valeur par défaut de cache si la valeur n'est pas trouvée dans
   * $caches
   */
  protected $defaultCache;

  function setNoCache(bool $noCache=true, bool $reset=true): self {
    if ($reset) $this->caches = [];
    $this->defaultCache = !$noCache;
    return $this;
  }

  function shouldCache(string $id, bool $reset=true): bool {
    $cache = A::get($this->caches, $id, $this->defaultCache);
    $this->caches[$id] = $reset?: $cache;
    return $cache;
  }
}
