"""
File importer registry.

Each module in this package exposes:
  extensions   frozenset[str]       – lower-case extensions it handles
  calibrated   bool                 – True when physical dimensions are known
  load(path)   → list[DataField]    – load all channels
  channel_names(path) → list[str]   – channel name strings (same order as load)

Usage::

    from backend.importers import get_importer, all_extensions

    importer = get_importer(".gwy")   # returns the gwy module, or None
"""

from __future__ import annotations

from pathlib import Path
from types import ModuleType

from backend.importers import array_image, ergo_hdf5, gwy, ibw, sxm

_IMPORTERS: list[ModuleType] = [gwy, sxm, ibw, ergo_hdf5, array_image]

# ext → importer module
_REGISTRY: dict[str, ModuleType] = {}
for _mod in _IMPORTERS:
    for _ext in _mod.extensions:
        _REGISTRY[_ext] = _mod


def get_importer(ext: str) -> ModuleType | None:
    """Return the importer module for *ext* (e.g. '.gwy'), or None."""
    return _REGISTRY.get(ext.lower())


def all_extensions() -> frozenset[str]:
    """All file extensions supported across every registered importer."""
    return frozenset(_REGISTRY)


def calibrated_extensions() -> frozenset[str]:
    """Extensions whose importers report physical calibration."""
    return frozenset(ext for ext, mod in _REGISTRY.items() if mod.calibrated)
