"""FilteredEntities — resultado de filtrar entidades de un knowledge graph por tipos."""

from dataclasses import dataclass, field

from entity_node import EntityNode


@dataclass
class FilteredEntities:
    """Resultado de filtrar entidades de un graph por tipos definidos.

    Captura tanto las entidades filtradas como los conteos para reporting.
    El total_count vs filtered_count muestra cuantas entidades se descartaron.
    """

    entities: list[EntityNode]
    entity_types: set[str]
    total_count: int
    filtered_count: int

    def to_dict(self) -> dict:
        """Serializa el resultado a un diccionario."""
        return {
            "entities": [e.to_dict() for e in self.entities],
            "entity_types": list(self.entity_types),
            "total_count": self.total_count,
            "filtered_count": self.filtered_count,
        }
