"""publishing/publishing_adapter.py — 출판팀 기존 워크플로우 보호하는 얇은 래퍼."""

from __future__ import annotations

from engine_v2.engine_orchestrator import EngineOrchestrator
from engine_v2.engine_result import EngineResult, EngineRole


class PublishingAdapter:
    """출판팀 워크플로우 어댑터.

    engine_v2 오케스트레이터를 출판팀 인터페이스에 맞게 래핑한다.
    출판팀은 이 어댑터만 사용하고, engine_v2 내부를 알 필요 없다.
    """

    def __init__(self) -> None:
        self._orchestrator = EngineOrchestrator()

    async def run_step(
        self,
        prompts: list[str],
        engines: list[EngineRole],
        task_id: str,
        step: int,
        timeout: int = 900,  # 출판팀 기본 900초
    ) -> list[EngineResult]:
        """단일 Step 실행. 출판팀은 이 메서드를 통해 엔진을 호출."""
        # Step 1 (병렬 초안): PARALLEL
        # Step 2+ (순차 피드백): SEQUENTIAL
        mode: str = "PARALLEL" if step == 1 else "SEQUENTIAL"
        return await self._orchestrator.run(
            mode=mode,  # type: ignore[arg-type]
            prompts=prompts,
            engines=engines,
            task_id=task_id,
            step=step,
            timeout=timeout,
        )

    async def broadcast(
        self,
        prompt: str,
        engines: list[EngineRole],
        task_id: str,
        step: int,
        timeout: int = 900,
    ) -> list[EngineResult]:
        """동일 프롬프트를 모든 엔진에 브로드캐스트."""
        return await self._orchestrator.run(
            mode="BROADCAST",
            prompts=[prompt],
            engines=engines,
            task_id=task_id,
            step=step,
            timeout=timeout,
        )
