"""geometry テスト共通フィクスチャ．

テスト用 STL ファイルを tmp_path に生成して返す．
モックは使わず実ファイルで検証する（GUIDE_08 モック方針）．
"""

import pathlib

import numpy
import pytest
import trimesh


@pytest.fixture
def tetrahedron_stl(tmp_path: pathlib.Path) -> pathlib.Path:
    """四面体 STL を tmp_path に書き出してそのパスを返す．

    頂点数 4, 面数 4 の最小三角形メッシュ．
    """
    vertices = numpy.array(
        [
            [0.0, 0.0, 0.0],
            [1.0, 0.0, 0.0],
            [0.5, 1.0, 0.0],
            [0.5, 0.5, 1.0],
        ],
        dtype=numpy.float64,
    )
    faces = numpy.array(
        [
            [0, 1, 2],
            [0, 1, 3],
            [0, 2, 3],
            [1, 2, 3],
        ],
        dtype=numpy.int64,
    )
    mesh = trimesh.Trimesh(vertices=vertices, faces=faces)
    path = tmp_path / "shape.stl"
    mesh.export(str(path))
    return path


@pytest.fixture
def cube_stl(tmp_path: pathlib.Path) -> pathlib.Path:
    """立方体 STL を tmp_path に書き出してそのパスを返す．

    trimesh.creation.box() で生成: 頂点数 8, 面数 12．
    """
    mesh = trimesh.creation.box()
    path = tmp_path / "cube.stl"
    mesh.export(str(path))
    return path
