"""Read-only Blender inventory for the imported J/80 source asset.

Run with Blender in background mode.  The output deliberately records source-object and
material boundaries before any geometry is edited, so the clean-asset rebuild starts from
measurable facts rather than render-time masking heuristics.
"""

from __future__ import annotations

import json
import sys
from pathlib import Path

import bpy

ROOT = Path(__file__).resolve().parents[3]
DEFAULT_ASSET = ROOT / "v3/broadcast/core/web/assets/j80/j80.obj"


def source_asset() -> Path:
    args = sys.argv[sys.argv.index("--") + 1 :] if "--" in sys.argv else []
    return Path(args[0]).resolve() if args else DEFAULT_ASSET


def bounds(obj: bpy.types.Object) -> dict[str, list[float]]:
    corners = [obj.matrix_world @ vertex.co for vertex in obj.data.vertices]
    return {
        "min": [min(v[i] for v in corners) for i in range(3)],
        "max": [max(v[i] for v in corners) for i in range(3)],
    }


def main() -> None:
    asset = source_asset()
    if not asset.is_file():
        raise SystemExit(f"J/80 OBJ not found: {asset}")
    bpy.ops.wm.read_factory_settings(use_empty=True)
    bpy.ops.wm.obj_import(filepath=str(asset), forward_axis="NEGATIVE_Z", up_axis="Y")
    mesh_objects = [obj for obj in bpy.context.scene.objects if obj.type == "MESH"]
    report = {
        "asset": str(asset),
        "objects": [
            {
                "name": obj.name,
                "vertices": len(obj.data.vertices),
                "faces": len(obj.data.polygons),
                "bounds": bounds(obj),
                "materials": [
                    {
                        "name": slot.material.name if slot.material else None,
                        "faces": sum(poly.material_index == index for poly in obj.data.polygons),
                    }
                    for index, slot in enumerate(obj.material_slots)
                ],
            }
            for obj in mesh_objects
        ],
    }
    print("J80_ASSET_INVENTORY=" + json.dumps(report, sort_keys=True))


if __name__ == "__main__":
    main()
