#!/usr/bin/env python3
import os, subprocess, glob

ROOT = "/root/site/video/site_renders"
projects = sorted(d for d in os.listdir(ROOT) if os.path.isdir(os.path.join(ROOT, d)))

# black placeholder 400x300
BLACK = "/root/site/video/black_thumb.png"
if not os.path.exists(BLACK):
    subprocess.run(["ffmpeg", "-y", "-v", "error", "-f", "lavfi", "-i", "color=c=black:s=400x300:d=1",
                    "-frames:v", "1", BLACK], check=True, capture_output=True)

def make_sheet(images, out, prefix):
    # pad to 6 with placeholders
    padded = images + [BLACK] * (6 - len(images))
    filters = []
    for idx, img in enumerate(padded):
        filters.append(f"[{idx}:v]scale=400:300:force_original_aspect_ratio=decrease,pad=400:300:(ow-iw)/2:(oh-ih)/2:black[a{idx}]")
    inrefs = "".join(f"[a{i}]" for i in range(6))
    xstack = f"{inrefs}xstack=inputs=6:layout=0_0|400_0|800_0|0_300|400_300|800_300[grid]"
    labels = []
    prev = "grid"
    for idx, img in enumerate(images[:6]):
        name = os.path.basename(img)
        x = (idx % 3) * 400 + 8
        y = (idx // 3) * 300 + 8
        outl = f"l{idx}"
        labels.append(f"[{prev}]drawtext=text='{prefix} {name}':x={x}:y={y}:fontsize=18:fontcolor=yellow:box=1:boxcolor=black@0.7[{outl}]")
        prev = outl
    fc = ";".join(filters + [xstack] + labels) + f";[{prev}]null[vout]"
    cmd = ["ffmpeg", "-y", "-v", "error"]
    for img in padded:
        cmd += ["-i", img]
    cmd += ["-filter_complex", fc, "-map", "[vout]", "-frames:v", "1", out]
    r = subprocess.run(cmd, capture_output=True, text=True)
    if r.returncode != 0:
        print("FAIL", out, r.stderr[-300:])
    else:
        print("OK", out)

for idx, p in enumerate(projects):
    ext = sorted(glob.glob(os.path.join(ROOT, p, "Внешний вид", "*")))
    if ext:
        make_sheet(ext, f"/root/site/video/verify_ext_{idx}.jpg", p)
    plans = sorted(glob.glob(os.path.join(ROOT, p, "Планировки", "*")))
    if plans:
        make_sheet(plans, f"/root/site/video/verify_plan_{idx}.jpg", p)
print("ALL_SHEETS_DONE")
