<?php
namespace nur\config;

use nur\A;
use nur\session;

/**
 * Class SessionConfig: configuration stockée dans la session
 *
 * si la session n'est pas démarrée, cette classe est fonctionnellement comme
 * {@link ArrayConfig} (i.e la session n'est pas démarrée automatiquement)
 */
class SessionConfig extends DynConfig {
  /** @var array */
  protected $config;

  function has(string $pkey, string $profile): bool {
    $this->updateSession();
    if (session::started()) return session::phas("config:$profile:$pkey");
    else return A::phas_s($this->config, "$profile.$pkey");
  }

  function get(string $pkey, string $profile) {
    $this->updateSession();
    if (session::started()) return session::pget("config:$profile:$pkey");
    else return A::pget_s($this->config, "$profile.$pkey");
  }

  function set(string $pkey, $value, string $profile): void {
    $this->updateSession();
    if (session::started()) session::pset("config:$profile:$pkey", $value);
    else A::pset_s($this->config, "$profile.$pkey", $value);
  }

  /**
   * si la session est démarrée et que des valeurs avaient déjà été inscrites
   * dans cet objet, alors mettre à jour la session en conséquence.
   */
  function updateSession() {
    if (!session::started()) return;
    $config = $this->config;
    if ($config === null) return;
    #XXX mettre à jour la session à partir de $config
    $this->config = null;
  }
}