# -*- coding: utf-8 -*-
"""
STEP104-02 HPE Skeleton Test

실행:
  cd /d D:/honghee/blog_api
  python -m tools.test_hpe_skeleton
"""

import sys
from pathlib import Path

ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(ROOT))

from services.v2.human_publish.session import PublishSession
from services.v2.human_publish.logger import BehaviorLogger
from services.v2.human_publish.engine import HumanPublishEngine
from services.v2.human_publish.actor import Actor
from services.v2.human_publish.profile import BehaviorProfile
from services.v2.human_publish.intent import Intent


def dummy_handler(session):
    with session.step(Intent.OPEN_EDITOR):
        pass

    with session.step(Intent.REVIEW_CONTENT):
        pass

    with session.step(Intent.PUBLISH):
        pass

    return {
        "status": "success",
        "result_url": "https://blog.naver.com/test/123456789",
    }


def main():
    actor = Actor(
        name="actor_default",
        description="기본 테스트 작업자",
        review_level=1,
        image_focus=1,
        typing_style="normal",
    )

    profile = BehaviorProfile(
        name="profile_default",
        version="0.1",
        review_enabled=True,
        image_check_enabled=True,
        final_review_enabled=True,
    )

    session = PublishSession(
        pipeline_id="HPE-TEST-001",
        realtor_id=1,
        publish_queue_id=999,
        article_no="TEST-ARTICLE",
        draft_id=888,
        actor_name=actor.name,
        profile_name=profile.name,
    )

    logger = BehaviorLogger(verbose=True)
    engine = HumanPublishEngine(logger=logger)

    result = engine.run(session, handler=dummy_handler)

    print("=" * 100)
    print("[STEP104-02 HPE SKELETON TEST]")
    print("result:", result)
    print("session_id:", session.session_id)
    print("success:", session.success)
    print("result_url:", session.result_url)
    print("elapsed_seconds:", round(session.elapsed_seconds(), 3))
    print("events:", len(session.events))
    print("logger_records:", len(logger.records))
    print("-" * 100)

    for event in session.events:
        print(
            event.get("name"),
            event.get("status"),
            event.get("elapsed_ms"),
            event.get("error_message"),
        )

    print("=" * 100)

    if not session.success:
        raise SystemExit("FAILED: session success expected True")

    if not session.result_url:
        raise SystemExit("FAILED: result_url missing")

    if len(session.events) < 4:
        raise SystemExit("FAILED: expected at least 4 events")

    print("SUCCESS")


if __name__ == "__main__":
    main()
