import type { AudioProcessor } from './AudioProcessor';
import { SegmentShuffler } from './SegmentShuffler';
import { Reverser } from './Reverser';
import { StereoSwap } from './StereoSwap';
import { PanShuffler } from './PanShuffler';
import { Tremolo } from './Tremolo';
import { Chorus } from './Chorus';
import { PitchWobble } from './PitchWobble';
import { PitchShifter } from './PitchShifter';
import { MicroPitch } from './MicroPitch';
import { SpectralBlur } from './SpectralBlur';
import { SpectralShift } from './SpectralShift';
import { ConvolutionReverb } from './ConvolutionReverb';
import { Phaser } from './Phaser';
import { OctaveDown } from './OctaveDown';
import { OctaveUp } from './OctaveUp';
import { Normalize } from './Normalize';
import { BitCrusher } from './BitCrusher';
import { StereoWidener } from './StereoWidener';
import { HaasEffect } from './HaasEffect';
import { PhaseInverter } from './PhaseInverter';
import { Compressor } from './Compressor';
import { RingModulator } from './RingModulator';
import { Waveshaper } from './Waveshaper';
import { DCOffsetRemover } from './DCOffsetRemover';
import { TrimSilence } from './TrimSilence';
import { Resonator } from './Resonator';
import { LinearFadeOut } from './LinearFadeOut';
import { ExpFadeOut } from './ExpFadeOut';
import { LinearFadeIn } from './LinearFadeIn';
import { ExpFadeIn } from './ExpFadeIn';
import { PanLeftToRight } from './PanLeftToRight';
import { PanRightToLeft } from './PanRightToLeft';
import { LowPassSweepDown } from './LowPassSweepDown';
import { LowPassSweepUp } from './LowPassSweepUp';
import { HighPassSweepDown } from './HighPassSweepDown';
import { HighPassSweepUp } from './HighPassSweepUp';
import { TapeStop } from './TapeStop';
import { SlowTapeStop } from './SlowTapeStop';
import { TapeSpeedUp } from './TapeSpeedUp';
import { VinylStop } from './VinylStop';
import { TapeWobble } from './TapeWobble';

const processors: AudioProcessor[] = [
  new SegmentShuffler(),
  new Reverser(),
  new StereoSwap(),
  new PanShuffler(),
  new Tremolo(),
  new Chorus(),
  new PitchWobble(),
  new PitchShifter(),
  new MicroPitch(),
  new SpectralBlur(),
  new SpectralShift(),
  new ConvolutionReverb(),
  new Phaser(),
  new OctaveDown(),
  new OctaveUp(),
  new Normalize(),
  new BitCrusher(),
  new StereoWidener(),
  new HaasEffect(),
  new PhaseInverter(),
  new Compressor(),
  new RingModulator(),
  new Waveshaper(),
  new DCOffsetRemover(),
  new TrimSilence(),
  new Resonator(),
  new LinearFadeOut(),
  new ExpFadeOut(),
  new LinearFadeIn(),
  new ExpFadeIn(),
  new PanLeftToRight(),
  new PanRightToLeft(),
  new LowPassSweepDown(),
  new LowPassSweepUp(),
  new HighPassSweepDown(),
  new HighPassSweepUp(),
  new TapeStop(),
  new SlowTapeStop(),
  new TapeSpeedUp(),
  new VinylStop(),
  new TapeWobble(),
];

export function getRandomProcessor(): AudioProcessor {
  return processors[Math.floor(Math.random() * processors.length)];
}

export function getAllProcessors(): AudioProcessor[] {
  return processors;
}
