"""Fábrica que decide qué proveedor de datos y qué resumidor usar, según config.

Aquí es donde 'enchufamos' implementaciones nuevas (twikit, API oficial, Claude...)
sin tocar el resto de la app.
"""

from agent.providers.base import TweetProvider
from agent.summarizers.base import Summarizer


def get_provider(name: str, cfg: dict) -> TweetProvider:
    name = (name or "mock").lower()
    if name == "mock":
        from agent.providers.mock import MockProvider
        return MockProvider()
    if name == "syndication":
        from agent.providers.syndication import SyndicationProvider
        return SyndicationProvider(cfg)
    if name == "scweet":
        from agent.providers.scweet_provider import ScweetProvider
        return ScweetProvider(cfg)
    # Próximamente:
    # if name == "official": from agent.providers.official import OfficialProvider; return OfficialProvider(cfg)
    raise ValueError(f"Proveedor de datos desconocido: {name!r}")


def get_summarizer(name: str, cfg: dict) -> Summarizer:
    name = (name or "simple").lower()
    if name in ("simple", "mock", "none"):
        from agent.summarizers.simple import SimpleSummarizer
        return SimpleSummarizer()
    # Próximamente:
    # if name == "claude": from agent.summarizers.claude import ClaudeSummarizer; return ClaudeSummarizer(cfg)
    raise ValueError(f"Resumidor desconocido: {name!r}")
