const fmtTimestamp = (sec) => { if (sec == null) return ''; const total = Math.floor(sec); const h = Math.floor(total / 3600); const m = Math.floor((total % 3600) / 60); const s = total % 60; if (h) return `${h}:${String(m).padStart(2,'0')}:${String(s).padStart(2,'0')}`; return `${m}:${String(s).padStart(2,'0')}`; }; export default function PipelineDetailModal({ pipeline, onClose }) { if (!pipeline) return null; const meta = pipeline.metadata || {}; const review = pipeline.review || {}; return (
e.stopPropagation()}>

{pipeline.compile_title || pipeline.track_title || `Pipeline #${pipeline.id}`}

{pipeline.visual_style || 'essential'}
{pipeline.cover_url && (
cover
커버 (배경)
)} {pipeline.thumbnail_url && (
thumbnail
썸네일
)}
{pipeline.video_url && (
)} {meta.title && (

메타데이터

제목: {meta.title}

설명 ({(meta.description || '').length}자)
{meta.description}

태그: {(meta.tags || []).join(', ')}

)} {review.weighted_total != null && (

AI 검토 {review.verdict} ({review.weighted_total}/100)

메타데이터 품질{review.metadata_quality?.score}
콘텐츠 정책{review.policy_compliance?.score}
시청 경험{review.viewer_experience?.score}
트렌드 정렬{review.trend_alignment?.score}
{review.summary &&

{review.summary}

}
)} {pipeline.tracks && pipeline.tracks.length > 1 && (

트랙 리스트 ({pipeline.tracks.length})

    {pipeline.tracks.map(t => (
  1. [{fmtTimestamp(t.start_offset_sec)}] {' '}{t.title} ({fmtTimestamp(t.duration_sec)})
  2. ))}
)} {pipeline.feedback && pipeline.feedback.length > 0 && (

피드백 히스토리 ({pipeline.feedback.length})

    {pipeline.feedback.map(f => (
  • [{f.step}] {f.feedback_text} {(f.received_at || '').replace('T', ' ')}
  • ))}
)} {pipeline.youtube_video_id && ( 🎬 YouTube에서 보기 )}
); }