import { EventEmitter } from 'events';

export class MessagePortMain extends EventEmitter implements Electron.MessagePortMain {
  _internalPort: any;
  constructor(internalPort: any) {
    super();
    this._internalPort = internalPort;
    this._internalPort.emit = (channel: string, event: { ports: any[] }) => {
      if (channel === 'message') {
        event = { ...event, ports: event.ports.map((p) => new MessagePortMain(p)) };
      }
      this.emit(channel, event);
    };
  }

  start() {
    return this._internalPort.start();
  }

  close() {
    return this._internalPort.close();
  }

  postMessage(...args: any[]) {
    if (Array.isArray(args[1])) {
      args[1] = args[1].map((o: any) => (o instanceof MessagePortMain ? o._internalPort : o));
    }
    return this._internalPort.postMessage(...args);
  }
}
