from abc import ABC, abstractmethod
from dto.post import Post


class BaseConnector(ABC):
    # Each subclass declares these at the class level
    source_name: str  # machine-readable: "reddit", "youtube"
    display_name: str  # human-readable: "Reddit", "YouTube"
    required_env: list[str] = []  # env vars needed to activate

    search_enabled: bool
    categories_enabled: bool

    @classmethod
    def is_available(cls) -> bool:
        """Returns True if all required env vars are set."""
        import os

        return all(os.getenv(var) for var in cls.required_env)

    @abstractmethod
    def get_new_posts_by_search(
        self, search: str = None, category: str = None, post_limit: int = 10
    ) -> list[Post]: ...

    @abstractmethod
    def category_exists(self, category: str) -> bool: ...
