import { eLocks } from '../enums.js';

export { Locks };

/**
 * Contient la classe lié aux locks, cad les éléments qui ne peuvent être changé dan une visio
 * @module Visio/Structures/Locks
 * @local Locks
 */

/**
 * @class
 * @classdesc Classe permettant de gérer les verrous de la visio
 */
class Locks {
  /**
   * Initialise la classe
   */
  constructor() {
    this._init()._setup();
  }

  /**
   *
   * @private
   */
  _init() {
    /**
     * Si le nom de la visio est bloqué ou non
     * @type {!boolean}
     * @readonly
     */
    this.room = false;
    /**
     * Si le channel est bloqué ou  non
     * @type {!boolean}
     * @readonly
     */
    this.channel = false;
    /**
     * Si le mot de passe est bloqué ou non
     * @type {!boolean}
     * @readonly
     */
    this.password = false;

    return this;
  }

  /**
   * @private
   */
  _setup() {
    const _room =
      rcmail.env['webconf.locks']?.includes?.(eLocks.room) ?? this.room;
    const _channel =
      rcmail.env['webconf.locks']?.includes?.(eLocks.mode) ?? this.channel;
    const _password =
      rcmail.env['webconf.locks']?.includes?.(eLocks.password) ?? this.password;
    Object.defineProperties(this, {
      room: {
        value: _room,
        writable: false,
        configurable: false,
      },
      channel: {
        value: _channel,
        writable: false,
        configurable: false,
      },
      password: {
        value: _password,
        writable: false,
        configurable: false,
      },
    });
  }
}