#!/usr/bin/env python3

import sys
import trimesh

MAX_X = 75
MAX_Y = 50
MAX_Z = 50


def main():
    if len(sys.argv) != 2:
        print("usage: check_model_size.py <model>")
        sys.exit(1)

    try:
        mesh = trimesh.load(sys.argv[1])

        if isinstance(mesh, trimesh.Scene):
            mesh = trimesh.util.concatenate(tuple(mesh.geometry.values()))

        x, y, z = mesh.bounding_box.extents

        limits = {
            "X": (x, MAX_X),
            "Y": (y, MAX_Y),
            "Z": (z, MAX_Z),
        }

        failures = []

        for axis, (size, limit) in limits.items():
            if size > limit:
                failures.append(f"{axis} too large")

        if not failures:
            print("PASS")
            sys.exit(0)

        scale = min(
            MAX_X / x,
            MAX_Y / y,
            MAX_Z / z
        )

        print(
            f"FAIL: {', '.join(failures)} | "
            f"uniform scale <= {scale:.3f}"
        )

        sys.exit(2)

    except Exception:
        print("ERROR")
        sys.exit(3)


if __name__ == "__main__":
    main()
