from __future__ import annotations

from typing import Protocol

from app.features.personalized_reco.content_repository.types import ContentProfileDTO


class ContentRepository(Protocol):
    """
    推荐引擎依赖的内容数据访问抽象接口（用于解耦 ORM/SQL）。
    """

    async def fetch_candidates(
        self,
        *,
        scene: str,
        user_profile: object,
        fallback_level: int,
        limit: int,
        locale: str,
        exclude_content_ids: list[int] | None = None,
    ) -> list[ContentProfileDTO]:
        """
        按场景与用户画像拉取候选内容画像（用于候选池）。
        """

    async def fetch_contents_by_ids(
        self,
        *,
        content_ids: list[int],
        locale: str,
    ) -> list[ContentProfileDTO]:
        """
        按 content_id 批量获取内容画像（去重、按输入顺序返回；缺语言/缺记录的 id 跳过）。
        """

