import { EditTiming } from '@/components/edit2025/types';

import insertClipCreationIntentsToList from '../insertClipCreationIntentsToList';
import insertClipsToList from '../insertClipsToList';
import { StudioTrackCore } from '../types';
import moveClip from './moveClip';
import moveClipCreationIntent from './moveClipCreationIntent';

export default function moveTrackContentAfter<T extends StudioTrackCore>(
  timing: EditTiming,
  track: T,
  afterPoint: number,
  delta: number
): T {
  const newTrack = { ...track };
  newTrack.clips = insertClipsToList(
    timing,
    newTrack.clips
      .filter((c) => c.startBeats >= afterPoint)
      .map((c) => moveClip(c, delta)),
    newTrack.clips.filter((c) => c.startBeats < afterPoint)
  );
  newTrack.clipCreationIntents = insertClipCreationIntentsToList(
    newTrack.clipCreationIntents
      .filter((c) => (c.startBeats ?? -Infinity) >= afterPoint)
      .map((c) => moveClipCreationIntent(c, delta)),
    newTrack.clipCreationIntents.filter(
      (c) => (c.startBeats ?? -Infinity) < afterPoint
    )
  );
  return newTrack;
}
