"""이미지 생성 파이프라인 캔버스 그래프 API (read-only).

설계 SOT: docs/w21b-pipeline-canvas-ui-20260629/. 메인 파이프라인 무접촉 — 오직
``build_pipeline_graph`` 로 nodes/edges 를 조립해 반환한다(신규 라우터, 기존 무수정).
"""

import logging
from typing import Optional

from fastapi import APIRouter, Depends, Query
from sqlalchemy.orm import Session as OrmSession

from app.api.deps import get_db, verify_project_access
from app.schemas.pipeline import PipelineGraphResponse
from app.services.pipeline_graph_service import build_pipeline_graph

logger = logging.getLogger(__name__)

router = APIRouter(
    prefix="/api/v1/projects/{project_id}",
    tags=["pipeline"],
)


@router.get("/pipeline-graph", response_model=PipelineGraphResponse)
def get_pipeline_graph(
    episode_id: Optional[str] = Query(default=None),
    project_id: str = Depends(verify_project_access),
    db: OrmSession = Depends(get_db),
) -> PipelineGraphResponse:
    """프로젝트의 이미지 생성 파이프라인 그래프(에피소드 단위, read-only).

    episode_id 미지정 시 ``build_pipeline_graph`` 가 첫 에피소드를 default 로 선택한다.
    """
    return build_pipeline_graph(db, project_id, episode_id)
