import type { Category } from '../../domain/types';
import { ROUTE_COLORS, TWIN_LAYOUT } from './itemMotion';
import RollCageMesh from './RollCageMesh';
interface Props {
activeCategory?: Category;
activeRoute?: Category;
}
function ZoneBox({
position,
size,
color,
active,
}: {
position: [number, number, number];
size: [number, number, number];
color: string;
active: boolean;
}) {
return (
{/* Highlight ring for active zone */}
{active && (
)}
);
}
/** Roll-cage for C/D zones — shared instanced mesh (exterior 1200×800×800 incl. wheels), open top */
function RollCage({
position,
size,
color,
active,
}: {
position: [number, number, number];
size: [number, number, number];
color: string;
active: boolean;
}) {
return (
{/* Floor highlight for active cage */}
{active && (
)}
);
}
export default function SortingZones3D({ activeCategory, activeRoute }: Props) {
const active = activeRoute ?? activeCategory;
const cage = TWIN_LAYOUT.rollCageSize;
const beltY = TWIN_LAYOUT.beltY;
return (
{/* Zone A feed — pad under belt (aligned to shared belt height) */}
{/* Zone B main sorter — green, straight */}
{/* Roll-cage C 1200×800×800 mm — orange, ground-origin shared mesh */}
{/* Roll-cage D 1200×800×800 mm — purple, ground-origin shared mesh */}
);
}