import type React from 'react'; import type { Object3D } from 'three'; import type { GuidedTour } from '../../../animations/guidedTour'; import type { MachineAnimationModule, Vec3 } from '../../../animations/types'; export type ProceduralMachineId = | 'four-stroke-petrol-engine' | 'planetary-gearbox' | 'differential-gear' | 'centrifugal-pump' | 'geneva-drive' | 'ball-bearing' | 'disc-brake-caliper' | 'wankel-rotary-engine'; export type ProceduralMachineCategory = | 'Engines' | 'Gearboxes & Drives' | 'Pumps & Fluid Systems' | 'Mechanisms' | 'Structural / Other'; export type ProceduralMachineDifficulty = 'Beginner' | 'Intermediate' | 'Advanced'; export interface EngineeringFact { label: string; value: string; detail?: string; } export interface MachinePartDefinition { id: string; name: string; description: string; material?: string; engineeringNote?: string; labelPosition?: Vec3; defaultOpacity?: number; keywords?: string[]; } export interface MachineCameraPreset { id: string; label: string; position: Vec3; target: Vec3; fov?: number; } export interface ProceduralMachineDefinition { id: ProceduralMachineId; slug: string; title: string; subtitle: string; category: ProceduralMachineCategory; difficulty: ProceduralMachineDifficulty; summary: string; description: string; keywords: string[]; complexity: number; dateAdded: string; typicalRpm: string; facts: EngineeringFact[]; parts: MachinePartDefinition[]; cameraPresets: MachineCameraPreset[]; tour: GuidedTour; relatedMachineIds: ProceduralMachineId[]; } export interface PartVisualState { visible?: boolean; opacity?: number; } export interface ProceduralMachineSceneProps { registerPart?: (partId: string, object: Object3D | null) => void; selectedPartId?: string | null; hoveredPartId?: string | null; highlightedPartIds?: string[]; partState?: Record; explodedDistance?: number; wireframe?: boolean; labelsVisible?: boolean; onSelectPart?: (partId: string) => void; onHoverPart?: (partId: string | null) => void; } export interface ProceduralMachineModule { definition: ProceduralMachineDefinition; animationModule: MachineAnimationModule; Scene: React.ComponentType; }