#!/usr/bin/env bash
# RINA - TOXIC 롱폼 MV 최종 조립 (2026-08-11)
#
# 계약: 컷 비디오의 오디오는 **전부 버린다**. 최종 오디오는 원곡 mp3 를 통째로 다시 입힌다.
#   ⓐ H3 -audiopass 는 준 오디오를 모델 조건(립싱크)과 출력 mux 양쪽에 쓴다.
#      → B-roll 에 무음을 주면 립싱크는 꺼지지만 그 구간 음악까지 사라진다(초판 결함).
#   ⓑ 원곡을 통째로 입히면 그 결합이 끊기고, 컷 경계의 오디오 이음매(클릭·위상 불연속)도 없어진다.
#
# 컷 순서 = plan.json 의 i 순서. 산출 경로는 dockaiq DB 에서 job id 로 끌어온다
# (job-NNNNNN 디렉터리를 glob 으로 줍지 않는다 — 순서가 사전순이라 어긋난다).
set -euo pipefail
cd "$(dirname "$0")"

OUT="${1:-rina-toxic-mv.mp4}"
SRC_MP3="/Users/inhohur/Documents/crew-vault/chosn/발매음반/리나 - TOXIC/음원/3. TOXIC.mp3"
DB="postgresql://dockaiq_user:ZRT8MTOSDZJseLofvlCeh0upsCYpdmhm@localhost:5432/dockaiq"

# 1) 컷 순서대로 산출 경로 수집 — 하나라도 비면 즉시 중단(조용한 누락 금지)
python3 - <<'PY'
import json, subprocess, os, sys
DB="postgresql://dockaiq_user:ZRT8MTOSDZJseLofvlCeh0upsCYpdmhm@localhost:5432/dockaiq"
ids=json.load(open('jobs-v2.json'))
lines=[]
for i, jid in enumerate(ids, 1):
    if not jid: sys.exit(f"컷 {i}: job id 없음 — 발주 자체가 실패했다")
    r=subprocess.run(['psql',DB,'-tAc',
        f"select state, coalesce(output_paths,'') from jobs where id={jid}"],
        capture_output=True, text=True).stdout.strip()
    state, paths = r.split('|',1)
    if state!='done': sys.exit(f"컷 {i}(job {jid}): state={state} — 아직 안 끝났다")
    p=json.loads(paths)[0]
    if not os.path.exists(p): sys.exit(f"컷 {i}(job {jid}): 산출 파일 부재 {p}")
    lines.append(f"file '{p}'")
open('_concat.txt','w').write("\n".join(lines)+"\n")
print(f"컷 {len(lines)}개 수집 완료")
PY

# ★TCC — 이 셸에서 ~/Documents 는 막혀 있다. sshd 는 Full Disk Access 가 있어 통과한다.
if [ ! -r "$SRC_MP3" ]; then
  ssh homemac "cat '$SRC_MP3'" > _src.mp3
  SRC_MP3=_src.mp3
fi

# 2) concat + 오디오 전량 제거 (-an) — 재인코딩 없이 스트림 복사
ffmpeg -y -v error -f concat -safe 0 -i _concat.txt -an -c:v copy _video_silent.mp4

# 3) 원곡 mp3 를 mux. -shortest 로 둘 중 짧은 쪽에 맞춘다.
ffmpeg -y -v error -i _video_silent.mp4 -i "$SRC_MP3" \
  -map 0:v:0 -map 1:a:0 -c:v copy -c:a aac -b:a 320k -shortest "$OUT"

rm -f _concat.txt _video_silent.mp4 _src.mp3

# 4) 검증 — 영상 길이와 오디오 길이가 어긋나면 컷 계획이 곡을 다 덮지 못한 것이다
echo "── 검증 ──"
ffprobe -v error -show_entries format=duration -show_entries stream=codec_type,codec_name,width,height,r_frame_rate -of default=nw=1 "$OUT"
echo "완성: $PWD/$OUT"
