import clearTimeFromClipList from '../clearTimeFromClipList';
import {
  getDerivedTiming,
  getSelectedTracks,
  getSelectionEndBeats,
  getSelectionStartBeats,
} from '../selectors';
import { StudioProjectState, StudioTrack } from '../types';

/**
 * Extracts trimmed and unmuted tracks from a studio state.
 * This function takes the selected tracks, clears clips outside the selection range,
 * and ensures all tracks are unmuted and not soloed.
 *
 * @param state - The studio project state
 * @returns Array of trimmed and unmuted tracks
 */
export const getTrimmedUnmutedTracks = (
  state: StudioProjectState
): StudioTrack[] => {
  const selectedTracks = getSelectedTracks(state);

  return selectedTracks.map((track) => ({
    ...track,
    solo: false,
    muted: false,
    clips: clearTimeFromClipList(
      getDerivedTiming(state),
      getSelectionEndBeats(state),
      Infinity,
      clearTimeFromClipList(
        getDerivedTiming(state),
        -Infinity,
        getSelectionStartBeats(state),
        track.clips
      )
    ),
  }));
};
