/**
 * Cyber-Assistant - Registre de modules
 * Permet l'enregistrement et la récupération de modules de manière centralisée.
 * Maintient la compatibilité avec les exports window.* existants.
 */
(function() {
  'use strict';

  // Namespace global CSI
  window.CSI = window.CSI || {};

  // Registre des modules
  window.CSI.modules = {};

  // Version de l'application — valeur de référence embarquée, indispensable en mode
  // file:// où le fetch de version.json échoue ; en mode serveur, version.json
  // (chargé par loadAppVersion) reste autoritaire et écrase cette valeur.
  window.CSI.version = '3.0.1';

  /**
   * Enregistre un module dans le registre
   * @param {string} name - Nom unique du module
   * @param {object} module - Le module à enregistrer
   * @param {object} module.exports - Fonctions/objets à exposer globalement
   * @param {function} module.init - Fonction d'initialisation optionnelle
   */
  window.CSI.register = function(name, module) {
    if (!name || typeof name !== 'string') {
      void 0;
      return false;
    }

    if (this.modules[name]) {
      void 0;
      return false;
    }

    this.modules[name] = module;

    // Exposer les exports via window.* pour compatibilité
    if (module.exports && typeof module.exports === 'object') {
      Object.keys(module.exports).forEach(function(key) {
        if (window[key] === undefined) {
          window[key] = module.exports[key];
        } else {
          void 0;
        }
      });
    }

    // Appeler init si présent
    if (typeof module.init === 'function') {
      try {
        module.init();
      } catch (e) {
        void 0;
      }
    }

    void 0;
    return true;
  };

  /**
   * Récupère un module par son nom
   * @param {string} name - Nom du module
   * @returns {object|undefined} Le module ou undefined
   */
  window.CSI.get = function(name) {
    return this.modules[name];
  };

  /**
   * Vérifie si un module est chargé
   * @param {string} name - Nom du module
   * @returns {boolean}
   */
  window.CSI.has = function(name) {
    return !!this.modules[name];
  };

  /**
   * Liste tous les modules enregistrés
   * @returns {string[]} Noms des modules
   */
  window.CSI.list = function() {
    return Object.keys(this.modules);
  };

  // Log de chargement
  void 0;

})();
