import moveClip from '../actionHelpers/moveClip';
import moveClipCreationIntent from '../actionHelpers/moveClipCreationIntent';
import { getSelectedClipCreationIntents, getSelectedClips } from '../selectors';
import { StudioProjectState } from '../types';
import { combineActions } from './combineActions';
import updateClipCreationIntents from './updateClipCreationIntents';
import updateClips from './updateClips';

export default function moveSelection(deltaBeats: number) {
  return (state: StudioProjectState) =>
    combineActions(
      updateClips(
        getSelectedClips(state).map((clip) => clip.id),
        (clip) => moveClip(clip, deltaBeats)
      ),
      updateClipCreationIntents(
        getSelectedClipCreationIntents(state).map(
          (clipCreationIntent) => clipCreationIntent.id
        ),
        (clipCreationIntent) =>
          moveClipCreationIntent(clipCreationIntent, deltaBeats)
      ),
      (state) => ({
        ...state,
        selection: {
          ...state.selection,
          focusedArea: 'timeline' as const,
          anchorBeats: state.selection.anchorBeats + deltaBeats,
          focusBeats: state.selection.focusBeats + deltaBeats,
        },
      })
    )(state);
}
