import {EventEmitter} from 'events'; const STATE_CHANGE_EVENT = 'stateChange'; type StateChangeListener = (state: Record) => void; // Use the namespace pattern export namespace SystemState { const emitter = new EventEmitter(); let state: Record = {}; export function getState(): Record { return {...state}; } export function setState(newState: Record): void { state = {...state, ...newState}; emitter.emit(STATE_CHANGE_EVENT, getState()); } export function reset(): void { state = {}; emitter.emit(STATE_CHANGE_EVENT, getState()); } export function getAlertResponse(): number | undefined { return state.alertResponse; } export function setAlertResponse(response: number | undefined): void { setState({alertResponse: response}); } export function getTextFieldValue(fieldId: string): string | undefined { return state.textFieldValues?.[fieldId]; } export function setTextFieldValue(fieldId: string, value: string): void { const textFieldValues = {...(state.textFieldValues || {})}; textFieldValues[fieldId] = value; setState({textFieldValues}); } export function addEventListener(event: 'stateChange', listener: StateChangeListener): void { if (event !== STATE_CHANGE_EVENT) { throw new Error(`Invalid event: ${event}`); } emitter.addListener(event, listener); } export function removeEventListener(event: 'stateChange', listener: StateChangeListener): void { if (event !== STATE_CHANGE_EVENT) { throw new Error(`Invalid event: ${event}`); } emitter.removeListener(event, listener); } export function subscribe(handler: StateChangeListener): () => void { addEventListener(STATE_CHANGE_EVENT, handler); return () => removeEventListener(STATE_CHANGE_EVENT, handler); } }