# -*- coding: utf-8 -*-
"""
V2-006 Pipeline Runner

위치:
  D:/honghee/blog_api/services/v2/runner.py

역할:
- V2 Pipeline 실행 진입점
- Session -> Collect -> Draft -> Publish 순서로 Stage 등록
- 현재는 dummy stage 기반
- 다음 단계에서 각 Stage 내부를 실제 V1 기능 호출로 교체

사용 예:
  from services.v2.runner import run_v2_pipeline
  result = run_v2_pipeline(realtor_id=1)
"""

from datetime import datetime

from services.v2.pipeline_context import PipelineContext
from services.v2.pipeline_manager import PipelineManager
from services.v2.session_stage import SessionStage
from services.v2.collect_stage import CollectStage
from services.v2.draft_stage import DraftStage
from services.v2.publish_stage import PublishStage


def make_pipeline_id(realtor_id: int) -> str:
    now = datetime.now().strftime("%Y%m%d-%H%M%S")
    return f"V2-{now}-R{int(realtor_id)}"


def build_default_manager() -> PipelineManager:
    manager = PipelineManager()
    manager.register(SessionStage())
    manager.register(CollectStage())
    manager.register(DraftStage())
    manager.register(PublishStage())
    return manager


def run_v2_pipeline(realtor_id: int, pipeline_id: str | None = None) -> PipelineContext:
    context = PipelineContext(
        pipeline_id=pipeline_id or make_pipeline_id(realtor_id),
        realtor_id=int(realtor_id),
        version="v2",
    )

    manager = build_default_manager()
    manager.run(context)

    return context


def print_v2_summary(context: PipelineContext) -> None:
    print()
    print("=" * 80)
    print("[V2 PIPELINE SUMMARY]")
    print("pipeline_id:", context.pipeline_id)
    print("realtor_id:", context.realtor_id)
    print("version:", context.version)
    print("current_stage:", context.current_stage)
    print("-" * 80)
    print("session_status:", context.get("session_status"))
    print("collect_count:", context.get("collect_count"))
    print("draft_count:", context.get("draft_count"))
    print("publish_count:", context.get("publish_count"))
    print("-" * 80)
    print("[LOGS]")
    for log in context.logs:
        print("-", log)
    print("=" * 80)
