import type { INoiseCancellation } from '@stream-io/audio-filters-web';

export class NoiseCancellationStub implements INoiseCancellation {
  private listeners: { [event: string]: Array<(arg: boolean) => void> } = {};

  canAutoEnable = async () => true;
  isSupported = () => true;
  init = () => Promise.resolve(undefined);
  isEnabled = async () => true;
  enable = async () => {
    this.listeners['change']?.forEach((l) => l(true));
  };
  disable = async () => {
    this.listeners['change']?.forEach((l) => l(false));
  };
  setSuppressionLevel = () => {};
  dispose = () => Promise.resolve(undefined);
  toFilter = () => (ms: MediaStream) => ({ output: ms });
  on = (event, callback) => {
    (this.listeners[event] ??= []).push(callback);
    return () => {};
  };
  off = () => {};
  resume = () => {};
}
