<?php
namespace nur;

/**
 * Class cookie: gestion des cookies
 */
class cookie {
  /** chemin par défaut des cookies qui sont placés */
  const PATH = "/";

  /** @var string */
  protected static $path;

  /** obtenir le chemin par défaut des cookies qui sont placés */
  static final function get_path(): string {
    $path = self::$path;
    if ($path === null) $path = static::PATH;
    return $path;
  }

  /** spécifier le chemin par défaut des cookies qui sont placés */
  static final function set_path(string $path): void {
    self::$path = $path;
  }

  /** vérifier si le cookie spécifié existe. */
  static final function has($name): bool {
    if ($name === null || $name === false) return false;
    return array_key_exists($name, $_COOKIE);
  }

  /** obtenir la valeur du cookie spécifié. */
  static final function get(string $name, $default=null) {
    return A::get($_COOKIE, $name, $default);
  }

  /**
   * spécifier / mettre à jour la valeur du cookie spécifié.
   *
   * il s'agit d'un cookie de session, qui disparait à la fermeture du navigateur.
   *
   * retourner la valeur effectivement spécifiée (elle est transformée en chaine)
   */
  static final function set(string $name, $value="", ?string $path=null, bool $update_COOKIE=true) {
    if ($path === null) $path = self::get_path();
    $value = strval($value);
    setcookie($name, $value, 0, $path);
    if ($update_COOKIE) {
      // On peut avoir besoin de relire le cookie
      $_COOKIE[$name] = $value;
    }
    return $value;
  }

  /**
   * spécifier / mettre à jour la valeur du cookie spécifié, qui doit avoir une
   * durée de vie maximum de $delay minutes
   *
   * $delay est le nombre de minute au bout duquel le cookie doit expirer à
   * partir de l'heure courante
   *
   * retourner la valeur effectivement spécifiée (elle est transformée en chaine)
   */
  static final function setd(string $name, $value="", int $delay=30, ?string $path=null, bool $update_COOKIE=true) {
    if ($path === null) $path = self::get_path();
    $value = strval($value);
    setcookie($name, $value, time() + $delay * 60, $path);
    if ($update_COOKIE) {
      // On peut avoir besoin de relire le cookie
      $_COOKIE[$name] = $value;
    }
    return $value;
  }

  /** demander la suppression du cookie spécifié */
  static final function del(string $name, ?string $path=null): void {
    if ($path === null) $path = self::get_path();
    setcookie($name, false, 0, $path);
  }
}
