#!/usr/bin/env python3
"""
hyworld_view.py — Open a HY-World-2.0 point cloud / Gaussian Splat / mesh file
in an Open3D viewer window.

Usage:
  python scripts/hyworld_view.py <path.ply>
"""
from __future__ import annotations

import sys
import pathlib


def main():
    if len(sys.argv) < 2:
        print("usage: hyworld_view.py <path.ply>", file=sys.stderr)
        sys.exit(1)

    path = pathlib.Path(sys.argv[1])
    if not path.exists():
        print(f"file not found: {path}", file=sys.stderr)
        sys.exit(1)

    try:
        import open3d as o3d
    except ImportError as e:
        print(f"open3d not installed: {e}", file=sys.stderr)
        sys.exit(1)

    print(f"Loading {path}...")
    pcd = o3d.io.read_point_cloud(str(path))
    if len(pcd.points) > 0:
        print(f"Loaded point cloud: {len(pcd.points)} points")
        o3d.visualization.draw_geometries(
            [pcd], window_name=f"ZelPi HyWorld Viewer — {path.name}"
        )
        return

    # Not a point cloud (0 points) — try as a mesh (Gaussian Splat exports
    # sometimes use mesh-style .ply with faces rather than a bare point cloud).
    mesh = o3d.io.read_triangle_mesh(str(path))
    if len(mesh.vertices) == 0:
        print("No points or vertices found in file", file=sys.stderr)
        sys.exit(1)
    print(f"Loaded mesh: {len(mesh.vertices)} vertices, {len(mesh.triangles)} triangles")
    mesh.compute_vertex_normals()
    o3d.visualization.draw_geometries(
        [mesh], window_name=f"ZelPi HyWorld Viewer — {path.name}"
    )


if __name__ == "__main__":
    main()
