"""시각적 세계관 규칙 추출 모듈."""

import logging
from typing import Dict, 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 = "visual_world_rules"


def extract_visual_rules(
    fulltext: str,
    episode_summary: str = "",
    project_config: Optional[Dict] = None,
    opik_metadata: Optional[Dict] = None,
) -> Dict:
    """시나리오 전문 + 에피소드 요약 → 시각적 세계관 규칙 추출.

    Args:
        fulltext: 시나리오 전문 텍스트
        episode_summary: 에피소드 요약 (episode_summary 단계 결과)
        project_config: 프로젝트별 모델 오버라이드 설정
        opik_metadata: Opik 추적 메타데이터

    Returns:
        {
            "rules": [{"rule_type", "description", "visual_guideline"}, ...],
            "era": "시대 배경",
            "region": "지역/국가 배경",
        }
    """
    system = load_prompt(_MODULE, "system")
    schema = load_schema(_MODULE, "rules_schema")

    user_prompt = f"에피소드 요약:\n{episode_summary}\n\n시나리오 전문:\n{fulltext}"

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