import { useConveyorActions } from "./conveyor/useConveyorActions"; import { useMachineActions } from "./machine/useMachineActions"; import { useRoboticArmActions } from "./roboticArm/useRoboticArmActions"; import { useStorageActions } from "./storageUnit/useStorageUnitActions"; import { useVehicleActions } from "./vehicle/useVehicleActions"; import { useCallback, useEffect } from "react"; export function useActionHandler() { // Initialize all action handlers const { handleConveyorAction, cleanup: cleanupConveyor } = useConveyorActions(); const { handleVehicleAction, cleanup: cleanupVehicle } = useVehicleActions(); const { handleRoboticArmAction, cleanup: cleanupRoboticArm } = useRoboticArmActions(); const { handleMachineAction, cleanup: cleanupMachine } = useMachineActions(); const { handleStorageAction, cleanup: cleanupStorage } = useStorageActions(); // Main handler function const handleAction = useCallback((action: Action) => { if (!action) return; try { switch (action.actionType) { case 'default': case 'spawn': case 'swap': case 'delay': case 'despawn': handleConveyorAction(action as ConveyorAction); break; case 'travel': handleVehicleAction(action as VehicleAction); break; case 'pickAndPlace': handleRoboticArmAction(action as RoboticArmAction); break; case 'process': handleMachineAction(action as MachineAction); break; case 'store': handleStorageAction(action as StorageAction); break; default: console.warn(`Unknown action type: ${(action as Action).actionType}`); } } catch (error) { console.error('Error handling action:', error); // Consider adding error recovery or notification here } }, [ handleConveyorAction, handleVehicleAction, handleRoboticArmAction, handleMachineAction, handleStorageAction ]); // Cleanup all actions const cleanup = useCallback(() => { cleanupConveyor(); cleanupVehicle(); cleanupRoboticArm(); cleanupMachine(); cleanupStorage(); }, [ cleanupConveyor, cleanupVehicle, cleanupRoboticArm, cleanupMachine, cleanupStorage ]); // Auto cleanup on unmount useEffect(() => { return () => { cleanup(); }; }, [cleanup]); return { handleAction, cleanup }; }