import copyArraySection from '../utils/copyArraySection';
import makeAudioBuffer from '../utils/makeAudioBuffer';

export default (audioBuffer: AudioBuffer, insertedAudioBuffer: AudioBuffer, selectionStartSamples: number) => {
  const newAudioBuffer = makeAudioBuffer({
    length: Math.max(selectionStartSamples + insertedAudioBuffer.length, audioBuffer.length),
    sampleRate: audioBuffer.sampleRate,
    numberOfChannels: audioBuffer.numberOfChannels
  });

  for(let c = 0; c < audioBuffer.numberOfChannels; c ++) {
    const originalChannelData = audioBuffer.getChannelData(c);
    const outputChannelData = newAudioBuffer.getChannelData(c);
    const insertedChannelData = insertedAudioBuffer.getChannelData(c);

    // write samples from the original array in.
    copyArraySection(originalChannelData, outputChannelData, audioBuffer.length, 0, 0);

    // write the copied samples in, overwriting if necessary
    copyArraySection(insertedChannelData, outputChannelData, insertedAudioBuffer.length, 0, selectionStartSamples);
  }

  return newAudioBuffer;
}
