import type { AudioProcessor, ProcessorCategory } from "./AudioProcessor";

export class PhaseInverter implements AudioProcessor {
  getName(): string {
    return "Phase Inverter";
  }

  getDescription(): string {
    return "Inverts polarity of one or both channels";
  }

  getCategory(): ProcessorCategory {
    return 'Utility';
  }

  async process(
    leftChannel: Float32Array,
    rightChannel: Float32Array
  ): Promise<[Float32Array, Float32Array]> {
    const mode = Math.floor(Math.random() * 3);

    const newLeft = new Float32Array(leftChannel.length);
    const newRight = new Float32Array(rightChannel.length);

    const invertLeft = mode === 0 || mode === 2;
    const invertRight = mode === 1 || mode === 2;

    for (let i = 0; i < leftChannel.length; i++) {
      newLeft[i] = invertLeft ? -leftChannel[i] : leftChannel[i];
      newRight[i] = invertRight ? -rightChannel[i] : rightChannel[i];
    }

    return [newLeft, newRight];
  }
}
