#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Bakar musik ke semua reel IG StudioSoft yang sudah ada (di tempat, nama berkas tetap).

Nama berkas TIDAK diubah supaya jadwal Repliz yang sudah menunjuk URL itu ikut dapat audio.
Rakit ke berkas sementara lalu os.replace → tidak pernah ada URL yang menunjuk file setengah jadi.

Pakai: /usr/bin/python3 ss_reel_musik_semua.py            # rencana
       /usr/bin/python3 ss_reel_musik_semua.py --run      # eksekusi
"""
import argparse
import os
import sys

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
sys.path.insert(0, WS)
import ss_ig_reel_warna as R  # noqa: E402


def main():
    ap = argparse.ArgumentParser()
    ap.add_argument("--run", action="store_true")
    a = ap.parse_args()

    target = []
    for f in sorted(os.listdir(R.IMG)):
        m = __import__("re").match(r"ss_reel_(biru|putih)_(\d\d)\.mp4$", f)
        if not m:
            continue
        num, warna = m.group(2), m.group(1)
        if num not in R.ALBUM or R.ALBUM[num][1] != warna:
            continue
        target.append((num, warna))

    print(f"reel target: {len(target)}")
    belum, sudah, gagal = [], [], []
    for num, warna in target:
        path = R.video_path(num, warna)
        if R.audio_terisi(path):
            sudah.append(os.path.basename(path))
            continue
        belum.append((num, warna, path))

    print(f"sudah bermusik: {len(sudah)} | perlu dibakar: {len(belum)}")
    if not a.run:
        for num, warna, path in belum:
            print(f"  rencana: {os.path.basename(path)} ← {os.path.basename(R.bed_untuk(num, warna))}")
        return

    for num, warna, path in belum:
        tmp = path.replace(".mp4", "_tmp.mp4")
        try:
            files = R.slide_files(num)
            if not files:
                gagal.append(os.path.basename(path))
                print(f"  ❌ {os.path.basename(path)}: slide tidak ada")
                continue
            bg = R.PUTIH if warna == "putih" else R.BIRU
            R.build(files, tmp, bg, musik=R.bed_untuk(num, warna))
            if not R.audio_terisi(tmp):
                gagal.append(os.path.basename(path))
                print(f"  ❌ {os.path.basename(path)}: hasil masih senyap")
                continue
            os.replace(tmp, path)   # tukar sekaligus, URL tidak pernah lihat file setengah jadi
            print(f"  ✔ {os.path.basename(path)} · {os.path.getsize(path) / 1e6:.2f} MB")
        except Exception as e:
            gagal.append(os.path.basename(path))
            print(f"  ❌ {os.path.basename(path)}: {str(e)[:120]}")
        finally:
            if os.path.exists(tmp):
                os.remove(tmp)

    print(f"selesai: {len(belum) - len(gagal)} ok, {len(gagal)} gagal")
    if gagal:
        print("gagal:", ", ".join(gagal))


if __name__ == "__main__":
    main()
