import { Stream } from "../stream/stream.js";
import { Engine } from "./engine.js";

let streamErrorCounter: { [streamID: string]: number } = {}; // streamID to count
/**
 * handles events generated by exthos modules
 * USAGE: `engine.onAny(defaultEngineEventHandler)`
 * @param eventName
 * @param eventObj
 */

//  (event: string | string[], ...values: any[]): void;

function defaultEngineEventHandler(
  this: Engine,
  event: string | string[],
  eventObj: { stream: Stream }
): void {
  let eventName = event;
  let self = this;
  if (eventName === "engine.fatal") {
    throw new Error(
      (eventObj as any)["msg"] ||
        "engine.fatal occured, but msg was absent in the eventObj.msg"
    );
  }
  if (eventName === "engineProcess.stream.error") {
    console.log(`           ${eventName}>>${JSON.stringify(eventObj)}`);
    streamErrorCounter[eventObj.stream.streamID] =
      streamErrorCounter[eventObj.stream.streamID] || 0;
    streamErrorCounter[eventObj.stream.streamID] =
      streamErrorCounter[eventObj.stream.streamID] + 1;
    if (streamErrorCounter[eventObj.stream.streamID] === 5) {
      // remove the stream if error received 5 times
      self.remove(eventObj.stream);
    }
  } else {
    console.log(`           ${eventName}>>${JSON.stringify(eventObj)}`);
  }
}

export { defaultEngineEventHandler };
