# -*- coding: utf-8 -*-
"""
STEP104-06 HPE PublishBridge Test

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

목적:
- HpePublishBridge가 기존 publish_one(queue)을 감쌀 준비가 되었는지 확인한다.
- 실제 네이버 발행은 하지 않는다.
- blog_v2_publish_behavior 테이블에 기록되는지 확인한다.
"""

import sys
from pathlib import Path

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

from db import get_conn
from services.v2.human_publish.hpe_publish_bridge import HpePublishBridge


def dummy_legacy_publish_handler(session):
    """
    실제 publish_one(queue) 대신 사용하는 더미 handler.
    """
    return {
        "status": "success",
        "result_url": "https://blog.naver.com/test/999999999",
        "message": "dummy legacy publish completed",
    }


def main():
    fake_queue = {
        "id": 999001,
        "realtor_id": 1,
        "draft_id": 888001,
        "article_no": "TEST-HPE-BRIDGE",
        "pipeline_id": "HPE-BRIDGE-TEST-001",
    }

    conn = get_conn()

    try:
        bridge = HpePublishBridge(
            conn=conn,
            verbose=True,
        )

        result = bridge.run(
            queue=fake_queue,
            handler=dummy_legacy_publish_handler,
            pipeline_id="HPE-BRIDGE-TEST-001",
            actor_name="actor_default",
            profile_name="profile_default",
        )

        session = result.get("session", {})

        print("=" * 100)
        print("[STEP104-06 HPE PUBLISH BRIDGE TEST]")
        print("bridge_version:", result.get("bridge_version"))
        print("session_id:", session.get("session_id"))
        print("success:", session.get("success"))
        print("result_url:", session.get("result_url"))
        print("events:", len(session.get("events") or []))
        print("logger_records:", len(result.get("logger_records") or []))
        print("result:", result.get("result"))
        print("-" * 100)

        with conn.cursor() as cur:
            cur.execute(
                """
                SELECT
                    id,
                    session_id,
                    pipeline_id,
                    publish_queue_id,
                    realtor_id,
                    article_no,
                    behavior_name,
                    status,
                    elapsed_ms,
                    created_at
                FROM blog_v2_publish_behavior
                WHERE session_id=%s
                ORDER BY id ASC
                """,
                (session.get("session_id"),),
            )
            rows = cur.fetchall() or []

        print("[DB RECORDS]", len(rows))
        for row in rows:
            print(row)

        print("=" * 100)

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

        if not rows:
            raise SystemExit("FAILED: DB behavior records expected")

        print("SUCCESS")

    finally:
        conn.close()


if __name__ == "__main__":
    main()
