import sys
import importlib.util

# 1. Importer l'extension binaire .so qui se trouve dans le même dossier
# On utilise une importation relative pour cibler le fichier compilé
try:
    from . import pystopt as _core
except ImportError:
    # Cas de secours si l'importation relative échoue selon l'environnement
    _core = None

if _core:
    # 2. Exposer les fonctions globales (getVersion, etc.)
    # Cela permet de faire pystopt.getVersion()
    globals().update({k: v for k, v in _core.__dict__.items() if not k.startswith('_')})

    # 3. Injecter les sous-modules C++ dans sys.modules
    # C'est l'étape CRUCIALE pour autoriser "import pystopt.grids"
    _submodules = ["grids", "cdf", "regression", "tree", "glob", "geners"]
    
    for _sub in _submodules:
        if hasattr(_core, _sub):
            _mod_obj = getattr(_core, _sub)
            # Nom complet du module pour Python
            _full_name = f"{__name__}.{_sub}"
            # On l'enregistre dans le cache global de Python
            sys.modules[_full_name] = _mod_obj
            # On l'ajoute à l'espace de noms local pour pystopt.grids
            globals()[_sub] = _mod_obj
