import { getClipContentBeats } from './getClipContentBeats';
import { StudioClip } from './projectState/fixClip';

export default function autoCrossfadeClips<T extends StudioClip>(
  clips: T[],
  crossfadeDurationBeats: number = 0.0625 // 1/64th note
): T[] {
  const result: T[] = [];
  for (let i = 0; i < clips.length; i++) {
    const clip = clips[i];
    if (
      result[result.length - 1]?.endBeats >= clip.startBeats - 0.00001 &&
      clip.readStartBeats - crossfadeDurationBeats >
        getClipContentBeats(clip, 0) &&
      !clip.fadeInBeats &&
      !result[result.length - 1]?.fadeOutBeats
    ) {
      result[result.length - 1] = {
        ...result[result.length - 1],
        fadeOutBeats: crossfadeDurationBeats,
      };
      result.push({
        ...clip,
        fadeInBeats: crossfadeDurationBeats,
        startBeats: clip.startBeats - crossfadeDurationBeats,
        readStartBeats: clip.readStartBeats - crossfadeDurationBeats,
      });
    } else {
      result.push(clip);
    }
  }
  return result;
}
