# -*- coding: utf-8 -*-
"""
STEP104-01 HumanPublishEngine

역할:
- PublishSession을 받아 발행 흐름을 관리하는 상위 엔진.
- 현재 버전은 골격만 제공한다.
- 실제 Playwright 동작은 기존 publish_worker.py에서 유지한다.
"""


class HumanPublishEngine:
    version = "hpe-0.1"

    def __init__(self, logger=None):
        self.logger = logger

    def run(self, session, handler=None):
        """
        handler:
            기존 publish_worker 동작을 감싼 콜백.
            아직 HPE가 publish_worker를 대체하지 않으므로, 검증용으로만 사용한다.
        """
        print(
            "[HPE SESSION START]",
            f"session={session.session_id}",
            f"queue={session.publish_queue_id}",
            f"actor={session.actor_name}",
            f"profile={session.profile_name}",
        )

        try:
            with session.step("publish_session", logger=self.logger, meta={"hpe_version": self.version}):
                if handler:
                    result = handler(session)
                else:
                    result = {"status": "noop", "message": "handler not provided"}

            session.mark_success(result_url=(result or {}).get("result_url"))

            print(
                "[HPE SESSION FINISH]",
                f"session={session.session_id}",
                f"success=True",
                f"elapsed={session.elapsed_seconds():.1f}s",
            )

            return result

        except Exception as e:
            session.mark_failed(str(e))
            print(
                "[HPE SESSION FAILED]",
                f"session={session.session_id}",
                f"error={e}",
            )
            raise
