import { BoxGeometry, CylinderGeometry, SphereGeometry, TorusGeometry } from "three";
import { describe, expect, it } from "vitest";

import { createSoundEmitterMarkerMeshes } from "../../src/viewport-three/viewport-entity-markers";

describe("createSoundEmitterMarkerMeshes", () => {
  it("builds a speaker-like marker instead of a sphere", () => {
    const meshes = createSoundEmitterMarkerMeshes(0x72d7c9, false);

    expect(meshes).toHaveLength(5);
    expect(meshes[0].geometry).toBeInstanceOf(BoxGeometry);
    expect(meshes[1].geometry).toBeInstanceOf(TorusGeometry);
    expect(meshes[2].geometry).toBeInstanceOf(CylinderGeometry);
    expect(meshes[3].geometry).toBeInstanceOf(TorusGeometry);
    expect(meshes[4].geometry).toBeInstanceOf(CylinderGeometry);
    expect(meshes.some((mesh) => mesh.geometry instanceof SphereGeometry)).toBe(false);

    expect(meshes[0].position).toMatchObject({
      x: 0,
      y: 0,
      z: 0
    });
    expect(meshes[1].position.y).toBeGreaterThan(meshes[3].position.y);
    expect(meshes[1].position.z).toBeGreaterThan(0);
    expect(meshes[3].position.z).toBeGreaterThan(0);
  });
});
