"""Interfaz común para cualquier fuente de tweets.

Cualquier proveedor nuevo (twikit, API oficial, twitterapi.io...) solo tiene que
heredar de TweetProvider e implementar `fetch_user_tweets`. El resto de la app
no necesita saber de dónde vienen los datos.
"""

from abc import ABC, abstractmethod
from datetime import datetime
from typing import List

from agent.models import Tweet


class TweetProvider(ABC):
    @abstractmethod
    def fetch_user_tweets(self, handle: str, since: datetime, limit: int = 50) -> List[Tweet]:
        """Devuelve los tweets de `handle` publicados a partir de `since` (máx. `limit`)."""
        raise NotImplementedError

    def name(self) -> str:
        return self.__class__.__name__
