"""Interfaz común para los resumidores.

Cualquier motor nuevo (Claude, OpenAI, local...) hereda de Summarizer e implementa
`summarize`. Cambiar de uno a otro no afecta al resto de la app.
"""

from abc import ABC, abstractmethod
from typing import List, Optional, Tuple

from agent.models import Tweet


class Summarizer(ABC):
    @abstractmethod
    def summarize(self, ranked: List[Tuple[float, Tweet]], topics: Optional[List[str]] = None) -> str:
        """Recibe los tweets TOP (puntuación, tweet) y devuelve un resumen en Markdown."""
        raise NotImplementedError
