#!/usr/bin/env python3
"""Austria vs Jordan news video v5 - optimized for speed"""
import subprocess, os

SRC = "/root/news_clips/austria_final"
OUT = "/root/news_clips/austria_v5"
os.makedirs(OUT, exist_ok=True)
FONT = "/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc"

# Commentary
commentary = ("各位观众大家好，欢迎收看世界杯新闻。"
    "在刚刚结束的世界杯小组赛中，奥地利队以3比1战胜了约旦队。"
    "比赛第20分钟，奥地利队施密德率先破门，1比0领先。"
    "第50分钟，约旦队扳平比分，1比1。"
    "第76分钟，约旦队阿拉布不慎打入乌龙球，奥地利队2比1再次领先。"
    "比赛最后时刻，第90加12分钟，奥地利队获得点球并罚进，将比分锁定为3比1。"
    "最终，奥地利队3比1战胜约旦队，取得了一场关键的胜利。感谢收看。")

print("1. Generating TTS...")
subprocess.run(["edge-tts","--voice","zh-CN-YunxiNeural","--rate=+5%",
    "--text",commentary,"--write-media",f"{OUT}/tts.mp3"],check=True,timeout=60)

# Step 2: Trim and convert each clip to 9:16 (faster with ultrafast + trim)
clips_info = [
    (f"{SRC}/aut_goal_20.mp4",  0, 18, "⚽ 第20分钟", "奥地利 1-0  施密德进球"),
    (f"{SRC}/jor_goal.mp4",     0, 20, "⚽ 第50分钟", "约旦 1-1  扳平比分"),
    (f"{SRC}/aut_own_goal.mp4", 0, 20, "⚽ 第76分钟", "约旦 乌龙  2-1"),
    (f"{SRC}/jordan_pen.mp4",   0, 20, "⚽ 90+12'",   "奥地利 点球  3-1"),
]

print("2. Processing goal clips...")
for i, (src, ss, dur, title, sub) in enumerate(clips_info):
    out = f"{OUT}/clip_{i}.mp4"
    title_esc = title.replace(":","\\:").replace("%","\\%").replace("'","'\\\\''")
    sub_esc = sub.replace(":","\\:").replace("%","\\%").replace("'","'\\\\''")
    
    cmd = [
        "ffmpeg","-y","-ss",str(ss),"-i",src,"-t",str(dur),
        "-vf",f"scale=1920:1920:force_original_aspect_ratio=increase,crop=1080:1920,"
              f"drawtext=text='{title_esc}':fontcolor=#FFD700:fontsize=42:"
              f"box=1:boxcolor=black@0.5:boxborderw=14:x=(w-text_w)/2:y=60:fontfile={FONT},"
              f"drawtext=text='{sub_esc}':fontcolor=white:fontsize=36:"
              f"box=1:boxcolor=black@0.5:boxborderw=10:x=(w-text_w)/2:y=h-100:fontfile={FONT}",
        "-c:v","libx264","-preset","ultrafast","-crf","28",
        "-c:a","aac","-b:a","96k","-pix_fmt","yuv420p",out
    ]
    subprocess.run(cmd, check=True, timeout=90, capture_output=True)
    sz = os.path.getsize(out)
    print(f"  Clip {i}: {sub} ({dur}s, {sz/1024/1024:.1f}MB)")

# Step 3: B-roll from 4-min highlights
print("3. Extracting B-roll...")
for name, ss, dur in [("open",0,10), ("close",275,15)]:
    out = f"{OUT}/broll_{name}.mp4"
    subprocess.run([
        "ffmpeg","-y","-ss",str(ss),"-i",f"{SRC}/aut_jor_4min.mp4","-t",str(dur),
        "-vf","scale=1920:1920:force_original_aspect_ratio=increase,crop=1080:1920",
        "-c:v","libx264","-preset","ultrafast","-crf","28",
        "-c:a","aac","-b:a","96k","-pix_fmt","yuv420p",out
    ], timeout=60, capture_output=True)

# Step 4: Title cards
print("4. Creating title cards...")
def title_card(text_lines, color, dur, out_file):
    filters = []
    y = 400
    for line in text_lines:
        s = line.replace(":","\\:").replace("%","\\%").replace("'","'\\\\''")
        filters.append(f"drawtext=text='{s}':fontcolor=white:fontsize=60:"
                      f"box=1:boxcolor=black@0.5:boxborderw=18:"
                      f"x=(w-text_w)/2:y={y}:fontfile={FONT}")
        y += 100
    fstr = ",".join(filters)
    subprocess.run([
        "ffmpeg","-y","-f","lavfi","-i",f"color=c={color}:s=1080x1920:d={dur}",
        "-vf",fstr,"-c:v","libx264","-preset","ultrafast","-crf","26",
        "-pix_fmt","yuv420p","-t",str(dur),out_file
    ], timeout=60, capture_output=True)

title_card(["⚽ 2026世界杯","奥地利  vs  约旦","3  -  1"], "#1a1a2e", 6, f"{OUT}/title_open.mp4")
title_card(["🏆 全场结束","奥地利 3 - 1 约旦","奥地利队获胜"], "#0f3460", 6, f"{OUT}/title_close.mp4")

# Step 5: Concat all segments
segments = [
    f"{OUT}/title_open.mp4", f"{OUT}/broll_open.mp4",
    f"{OUT}/clip_0.mp4", f"{OUT}/clip_1.mp4",
    f"{OUT}/clip_2.mp4", f"{OUT}/clip_3.mp4",
    f"{OUT}/broll_close.mp4", f"{OUT}/title_close.mp4"
]

print("5. Concatenating...")
with open(f"{OUT}/concat.txt","w") as f:
    for s in segments: f.write(f"file '{s}'\n")

subprocess.run([
    "ffmpeg","-y","-f","concat","-safe","0",
    "-i",f"{OUT}/concat.txt","-c","copy",f"{OUT}/naked.mp4"
], timeout=60, capture_output=True)

# Step 6: Mix audio
print("6. Mixing audio...")
subprocess.run([
    "ffmpeg","-y","-i",f"{OUT}/naked.mp4","-i",f"{OUT}/tts.mp3",
    "-filter_complex",
    "[0:a]volume=0.25[a0];[1:a]adelay=500|500[a1];[a0][a1]amix=inputs=2:duration=first:dropout_transition=2[a]",
    "-map","0:v","-map","[a]","-c:v","copy","-c:a","aac","-b:a","128k","-shortest",
    f"{OUT}/final_news_v5.mp4"
], timeout=120, capture_output=True)

subprocess.run(["cp",f"{OUT}/final_news_v5.mp4","/root/austria_jordan_v5.mp4"], timeout=10)
sz = os.path.getsize(f"{OUT}/final_news_v5.mp4")
print(f"\n🎉 DONE! {sz/1024/1024:.1f}MB - /root/austria_jordan_v5.mp4")
