import { getBeatsFromZero } from '@suno/studiokit/timeMapping';

import {
  getDerivedTiming,
  getSelectionEndSeconds,
  getSelectionStartSeconds,
} from '../selectors';
import { StudioProjectState } from '../types';

export default function setSelectionSeconds(
  anchorSeconds: number,
  focusSeconds: number
) {
  return (state: StudioProjectState): StudioProjectState => {
    const timing = getDerivedTiming(state);
    return {
      ...state,
      selection: {
        ...state.selection,
        anchorBeats: getBeatsFromZero(anchorSeconds, timing),
        focusBeats: getBeatsFromZero(focusSeconds, timing),
      },
    };
  };
}

export const setSelectionStartSeconds =
  (startSeconds: number) => (state: StudioProjectState) => {
    const endSeconds = getSelectionEndSeconds(state);
    return setSelectionSeconds(startSeconds, endSeconds)(state);
  };

export const setSelectionEndSeconds =
  (endSeconds: number) => (state: StudioProjectState) => {
    const startSeconds = getSelectionStartSeconds(state);
    return setSelectionSeconds(startSeconds, endSeconds)(state);
  };
