#!/usr/bin/env python3
"""批量检测目录中的双声道音频；每通错误单独记录，不静默跳过。"""
import argparse
import csv
import json
from pathlib import Path
import subprocess
import sys

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument("input", type=Path)
    parser.add_argument("--out", type=Path, required=True)
    args = parser.parse_args()
    files = sorted(p for p in args.input.iterdir() if p.is_file() and p.suffix.lower() in {".wav", ".mp3", ".flac", ".ogg", ".m4a"})
    args.out.mkdir(parents=True, exist_ok=True)
    rows = []
    for audio in files:
        events = audio.with_suffix(".events.json")
        output = args.out / (audio.name + ".json")
        cmd = [sys.executable, str(Path(__file__).with_name("detect.py")), str(audio), "--out", str(output)]
        if events.exists():
            cmd += ["--events", str(events)]
            try:
                channel = json.loads(events.read_text()).get("system_channel", 1)
                cmd += ["--system-channel", str(channel)]
            except (ValueError, OSError): pass
        result = subprocess.run(cmd, capture_output=True, text=True)
        row = {"file": audio.name, "status": "OK" if result.returncode == 0 else "ERROR", "candidates": "", "message": result.stderr.strip()}
        if result.returncode == 0:
            report = json.loads(output.read_text()); row["candidates"] = report["candidate_count"]
            row["message"] = "；".join(report["warnings"])
        rows.append(row)
    with (args.out / "summary.csv").open("w", newline="", encoding="utf-8-sig") as f:
        writer = csv.DictWriter(f, fieldnames=["file", "status", "candidates", "message"]); writer.writeheader(); writer.writerows(rows)
    print(json.dumps({"files": len(rows), "errors": sum(r["status"] == "ERROR" for r in rows), "output": str(args.out / "summary.csv")}, ensure_ascii=False))
    sys.exit(1 if not rows or any(r["status"] == "ERROR" for r in rows) else 0)
