import { useState, useEffect, useCallback, useRef } from 'react';
import { LadderEngine } from '../../engine/engine';
// Singleton engine instance for the application
const engine = new LadderEngine();
export function useEngine() {
const [state, setState] = useState(() => engine.getState());
const [program, setProgram] = useState(() => engine.getProgram() || null);
const stopFnRef = useRef(null);
useEffect(() => {
const unsubscribe = engine.subscribe(() => {
setState({ ...engine.getState() });
const currentProgram = engine.getProgram();
if (currentProgram) {
setProgram(currentProgram);
}
});
return () => unsubscribe();
}, []);
const loadProgram = useCallback((newProgram) => {
engine.loadProgram(newProgram);
setProgram(newProgram);
}, []);
const start = useCallback(() => {
const stopFn = engine.start();
stopFnRef.current = stopFn;
}, []);
const stop = useCallback(() => {
if (stopFnRef.current) {
stopFnRef.current();
stopFnRef.current = null;
}
}, []);
return {
state,
engine,
program,
loadProgram,
start,
stop,
};
}