import { setIn } from 'lodash-redux-immutability';

import { setTimedCondition } from '@/app/(root)/create/v2/actions/currentModeSetters';
import {
  ConditionTypes,
  CreateFormState,
  CreateModes,
} from '@/app/(root)/create/v2/types';
import { Clip } from '@/state/clipStore';
import { getClipTitle } from '@/utils/clip';

const underpaintClip =
  (clip: Clip, options?: { overwriteLyrics?: boolean }) =>
  (state: CreateFormState) => {
    state = setIn(state, ['global', 'mode'], CreateModes.CUSTOM);

    const {
      [ConditionTypes.COVER]: cover,
      [ConditionTypes.PLAYLIST]: playlist,
      [ConditionTypes.INSPIRATION]: inspiration,
      [ConditionTypes.PERSONA]: persona,
      ...otherUntimedConditions
    } = state.global.untimedConditions;

    state = setIn(
      state,
      ['global', 'untimedConditions'],
      otherUntimedConditions
    );
    state = setIn(state, ['global', 'timedCondition'], null);

    const oldConfig = state[CreateModes.CUSTOM];
    state = setIn(state, [CreateModes.CUSTOM], {
      ...oldConfig,
      // Set lyrics from clip (the original instrumental's lyrics)
      lyrics:
        options?.overwriteLyrics === true
          ? clip.metadata?.prompt || ''
          : options?.overwriteLyrics === false
            ? oldConfig.lyrics
            : oldConfig.lyrics || clip.metadata?.prompt || '',
      title: getClipTitle(clip) + ' (Add Instrumental)',
    });

    state = setTimedCondition({
      type: ConditionTypes.UNDERPAINT,
      condition: {
        clipId: clip.id,
      },
    })(state);

    return state;
  };

export default underpaintClip;
