"""요소 교차 검증 모듈 — 다른 모델로 교차 확인."""
import logging
from typing import Dict, List, Optional
from app.modules.llm.llm_client import call_structured
from app.modules.prompt_loader import load_prompt, load_schema

logger = logging.getLogger(__name__)
_MODULE = "entity_review_v4"


def review_entities(
    entities: Dict[str, List[Dict]],
    fulltext: str,
    project_config: Optional[Dict] = None,
    opik_metadata: Optional[Dict] = None,
) -> Dict:
    """교차 모델 검증 — entity_extract가 GPT면 review는 Gemini (manifest default_model로 자동 라우팅)."""
    system = load_prompt(_MODULE, "system")
    schema = load_schema(_MODULE, "review_schema")

    def _fmt(items):
        return ", ".join(
            f"{e['name']}({len(e.get('scene_appearances', []))}씬)" for e in items
        )

    user_prompt = (
        f"추출된 인물: {_fmt(entities.get('characters', []))}\n"
        f"추출된 배경: {_fmt(entities.get('locations', []))}\n"
        f"추출된 소품: {_fmt(entities.get('props', []))}\n\n"
        f"시나리오 전문:\n{fulltext}\n\n"
        "위 요소 목록을 검토하여 누락/불필요 항목을 판별해주세요."
    )

    result = call_structured(
        step="entity_review",
        system_prompt=system,
        user_prompt=user_prompt,
        response_schema=schema,
        project_config=project_config,
        schema_name="entity_review",
        opik_metadata=opik_metadata,
    )
    return result
