from pathlib import Path

from nexy.core.config import Config


class RouteDiscovery:
    def __init__(self) -> None:
        self.config = Config()
        self.router_path = self.config.ROUTER_PATH

    def scan(self) -> list[Path]:
        """Scanne le répertoire des routes de manière récursive."""
        root = Path(self.router_path)
        if not root.is_dir():
            raise FileNotFoundError(f"Le répertoire {root} n'existe pas ou n'est pas un dossier")
        return list(self._walk(root))

    def _walk(self, current_path: Path):
        """Générateur interne pour parcourir l'arborescence."""
        try:
            for item in current_path.iterdir():
                if item.is_dir():
                    yield from self._walk(item)
                elif item.name not in self.config.ROUTE_FILE_EXCEPTIONS and item.suffix in self.config.ROUTE_FILE_EXTENSIONS:
                    yield item
        except PermissionError:
            pass
