from __future__ import annotations

from typing import TYPE_CHECKING, Any

from lfx.components._importing import import_mod

if TYPE_CHECKING:
    from .channel import YouTubeChannelComponent
    from .comments import YouTubeCommentsComponent
    from .playlist import YouTubePlaylistComponent
    from .search import YouTubeSearchComponent
    from .trending import YouTubeTrendingComponent
    from .video_details import YouTubeVideoDetailsComponent
    from .youtube_transcripts import YouTubeTranscriptsComponent

_dynamic_imports = {
    "YouTubeChannelComponent": "channel",
    "YouTubeCommentsComponent": "comments",
    "YouTubePlaylistComponent": "playlist",
    "YouTubeSearchComponent": "search",
    "YouTubeTranscriptsComponent": "youtube_transcripts",
    "YouTubeTrendingComponent": "trending",
    "YouTubeVideoDetailsComponent": "video_details",
}

__all__ = [
    "YouTubeChannelComponent",
    "YouTubeCommentsComponent",
    "YouTubePlaylistComponent",
    "YouTubeSearchComponent",
    "YouTubeTranscriptsComponent",
    "YouTubeTrendingComponent",
    "YouTubeVideoDetailsComponent",
]


def __getattr__(attr_name: str) -> Any:
    """Lazily import youtube components on attribute access."""
    if attr_name not in _dynamic_imports:
        msg = f"module '{__name__}' has no attribute '{attr_name}'"
        raise AttributeError(msg)
    try:
        result = import_mod(attr_name, _dynamic_imports[attr_name], __spec__.parent)
    except (ModuleNotFoundError, ImportError, AttributeError) as e:
        msg = f"Could not import '{attr_name}' from '{__name__}': {e}"
        raise AttributeError(msg) from e
    globals()[attr_name] = result
    return result


def __dir__() -> list[str]:
    return list(__all__)
