import sys
from pathlib import Path
import numpy as np, trimesh
sys.path.insert(0, str(Path(__file__).parent)); sys.path.insert(0, "/home/joao/code/data/meshes/fcp_2710_tests/scripts")
import gwn
from fcp._slice import PointSlicer
from parts_report import OBJ, ROOT
from make_clouds import PN
from make_noisy import label
tags = sys.argv[1].split(",")
print(f"{'object':16s} {'cloud':8s} {'n':>6s} {'true %':>7s} {'est %':>7s} {'spacing %':>9s}")
for name in OBJ:
    g = trimesh.load(OBJ[name], force="mesh"); diag = float(np.linalg.norm(g.extents))
    for tag in tags:
        for n in (10000, 2048):
            P = np.asarray(trimesh.load(ROOT / "pointclouds" / f"{name}_{tag}_{n}.ply").vertices)
            ps = PointSlicer(P, up=(0, 0, 1), device="cuda", slicer="surf")
            s = gwn.estimate_sigma(ps, normals=sys.argv[2] if len(sys.argv) > 2 else "grad")
            true = {f"pn{label(v)}": v for v in PN}.get(tag, 0.0)
            print(f"{name:16s} {tag:8s} {n:6d} {100*true:7.3f} {100*s/diag:7.3f} {100*ps.spacing/diag:9.3f}", flush=True)
