import os
import sys
import shutil
import subprocess
from pathlib import Path

sys.stdout.reconfigure(encoding='utf-8')

BASE_DIR = Path("c:/Projects/KieuStory")
ASSETS_DIR = BASE_DIR / "04_Assets"
VIDEOS_DIR = ASSETS_DIR / "videos"
ARCHIVE_DIR = ASSETS_DIR / "archive" / "prologue_pre_fix"
EXPORTS_DIR = BASE_DIR / "06_Exports"
TEMP_DIR = ASSETS_DIR / "temp_probe_test"

ARCHIVE_DIR.mkdir(parents=True, exist_ok=True)
EXPORTS_DIR.mkdir(parents=True, exist_ok=True)

print("=== STEP 1: BACKUP PRE-FIX SHOTS TO ARCHIVE ===")
for i in range(1, 5):
    fname = f"prologue_shot{i:02d}_10s_v1.mp4"
    src = VIDEOS_DIR / fname
    dst = ARCHIVE_DIR / fname
    if src.exists() and not dst.exists():
        shutil.copy2(src, dst)
        print(f"Archived {fname} -> {dst}")

print("\n=== STEP 2: ASSEMBLE INDIVIDUAL PERFECT SHOTS ===")

# Shot 01: Mux visual with authentic grandfather recitation
shot01_out = VIDEOS_DIR / "prologue_shot01_10s_v1.mp4"
cmd_sh01 = [
    "ffmpeg", "-y",
    "-i", str(ARCHIVE_DIR / "prologue_shot01_10s_v1.mp4"),
    "-i", str(ASSETS_DIR / "audio/prologue_inspect/prologue_shot_01_lang_que_198x_10s.wav"),
    "-map", "0:v", "-map", "1:a",
    "-c:v", "copy",
    "-c:a", "aac", "-b:a", "192k",
    "-t", "10.0",
    str(shot01_out)
]
subprocess.run(cmd_sh01, check=True)
print(f"[✓] Created {shot01_out}")

# Shot 02: Keep visual & audio (already authentic grandfather recitation)
shot02_out = VIDEOS_DIR / "prologue_shot02_10s_v1.mp4"
# Just ensure it's copied or re-encoded clean
print(f"[✓] Shot 02 verified: {shot02_out}")

# Shot 03: Mux visual with clean grandfather recitation + cosmic vortex foley
shot03_out = VIDEOS_DIR / "prologue_shot03_10s_v1.mp4"
cmd_sh03 = [
    "ffmpeg", "-y",
    "-i", str(ARCHIVE_DIR / "prologue_shot03_10s_v1.mp4"),
    "-i", str(TEMP_DIR / "shot03_clean_mix.wav"),
    "-map", "0:v", "-map", "1:a",
    "-c:v", "copy",
    "-c:a", "aac", "-b:a", "192k",
    "-t", "10.0",
    str(shot03_out)
]
subprocess.run(cmd_sh03, check=True)
print(f"[✓] Created {shot03_out}")

# Shot 04: Overlay banner 'Đại Minh Gia Tĩnh' (smooth fade-out 7.5s-8.8s) + pure ambient foley
shot04_out = VIDEOS_DIR / "prologue_shot04_10s_v1.mp4"
cmd_sh04 = [
    "ffmpeg", "-y",
    "-i", str(ARCHIVE_DIR / "prologue_shot04_10s_v1.mp4"),
    "-loop", "1", "-t", "10", "-i", str(TEMP_DIR / "shot04_patch_perfect.png"),
    "-i", str(TEMP_DIR / "shot04_clean_ambience.wav"),
    "-filter_complex", "[1:v]format=rgba,fade=t=out:st=7.5:d=1.3:alpha=1[p];[0:v][p]overlay=0:0[v]",
    "-map", "[v]", "-map", "2:a",
    "-c:v", "libx264", "-crf", "18", "-preset", "fast", "-pix_fmt", "yuv420p",
    "-c:a", "aac", "-b:a", "192k",
    "-t", "10.0",
    str(shot04_out)
]
subprocess.run(cmd_sh04, check=True)
print(f"[✓] Created {shot04_out}")

print("\n=== STEP 3: CONCATENATE 4 SHOTS INTO 40S MASTER ===")
concat_raw = EXPORTS_DIR / "prologue_raw_concat_40s.mp4"
master_40s = EXPORTS_DIR / "prologue_master_40s.mp4"
hoai_niem_40s = VIDEOS_DIR / "prologue_hoai_niem_198x_to_gia_tinh_40s.mp4"

cmd_concat = [
    "ffmpeg", "-y",
    "-i", str(shot01_out),
    "-i", str(shot02_out),
    "-i", str(shot03_out),
    "-i", str(shot04_out),
    "-filter_complex",
    "[0:v][0:a][1:v][1:a][2:v][2:a][3:v][3:a]concat=n=4:v=1:a=1[v][a]",
    "-map", "[v]", "-map", "[a]",
    "-c:v", "libx264", "-crf", "18", "-preset", "fast", "-pix_fmt", "yuv420p",
    "-c:a", "aac", "-b:a", "256k",
    str(concat_raw)
]
subprocess.run(cmd_concat, check=True)
print(f"[✓] Concat raw exported: {concat_raw}")

print("\n=== STEP 4: EBU R128 LOUDNORM MASTERING (-14 LUFS) ===")
cmd_norm = [
    "ffmpeg", "-y",
    "-i", str(concat_raw),
    "-af", "loudnorm=I=-14:TP=-1.0:LRA=11",
    "-c:v", "copy",
    "-c:a", "aac", "-b:a", "256k",
    str(master_40s)
]
subprocess.run(cmd_norm, check=True)
shutil.copy2(master_40s, hoai_niem_40s)
print(f"[✓] Master 40s created: {master_40s}")
print(f"[✓] Synced to: {hoai_niem_40s}")

print("\n=== STEP 5: VERIFY MASTER METRICS ===")
cmd_probe = [
    "ffprobe", "-v", "quiet", "-print_format", "json",
    "-show_format", "-show_streams", str(master_40s)
]
res = subprocess.run(cmd_probe, capture_output=True, text=True)
print("FFprobe summary:")
import json
d = json.loads(res.stdout)
print("  Duration:", d["format"].get("duration"), "seconds")
print("  Size:", int(d["format"].get("size", 0)) / 1024 / 1024, "MB")
for s in d.get("streams", []):
    print(f"  Stream {s.get('index')}: {s.get('codec_type')} ({s.get('codec_name')})")

print("\n=== ALL COMPLETE ===")
