import { v4 as uuidv4 } from 'uuid';

import { StudioProjectState, StudioTrack } from '../types';

export default function duplicateTrack(trackId: string) {
  return (state: StudioProjectState) => {
    const newTracks: StudioTrack[] = [];
    for (const track of state.tracks) {
      if (track.id === trackId) {
        newTracks.push({
          ...track,
          id: uuidv4(),
          clips: track.clips.map((clip) => ({
            ...clip,
            id: uuidv4(),
          })),
          clipCreationIntents: track.clipCreationIntents.map(
            (clipCreationIntent) => ({
              ...clipCreationIntent,
              id: uuidv4(),
            })
          ),
          takeLanes: track.takeLanes.map((takeLane) => ({
            ...takeLane,
            clips: takeLane.clips.map((clip) => ({
              ...clip,
              id: uuidv4(),
            })),
            clipCreationIntents: takeLane.clipCreationIntents.map(
              (clipCreationIntent) => ({
                ...clipCreationIntent,
                id: uuidv4(),
              })
            ),
            id: uuidv4(),
          })),
        });
      }
      newTracks.push(track);
    }
    return {
      ...state,
      tracks: newTracks,
    };
  };
}
