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

export class StereoWidener implements AudioProcessor {
  getName(): string {
    return "Stereo Widener";
  }

  getDescription(): string {
    return "Expands stereo field using mid-side processing";
  }

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

  async process(
    leftChannel: Float32Array,
    rightChannel: Float32Array
  ): Promise<[Float32Array, Float32Array]> {
    const widthFactor = 1.5 + Math.random() * 1.5;

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

    for (let i = 0; i < leftChannel.length; i++) {
      const mid = (leftChannel[i] + rightChannel[i]) * 0.5;
      const side = (leftChannel[i] - rightChannel[i]) * 0.5 * widthFactor;

      newLeft[i] = mid + side;
      newRight[i] = mid - side;
    }

    return [newLeft, newRight];
  }
}
