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

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

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

    const oldConfig = state[CreateModes.CUSTOM];
    const newConfig = {
      ...oldConfig,
      lyricsMode: LyricsInputModes.MANUAL,
      // Determine lyrics based on overwriteLyrics option
      lyrics:
        options?.overwriteLyrics === true
          ? clip.metadata?.prompt || ''
          : options?.overwriteLyrics === false
            ? oldConfig.lyrics
            : oldConfig.lyrics || clip.metadata?.prompt || '',
    };

    newConfig.title = getClipTitle(clip) + ' (Cover)';

    state = setIn(state, [CreateModes.CUSTOM], newConfig);

    // Clear any existing extend condition when adding cover
    state = setIn(state, ['global', 'timedCondition'], null);

    const {
      [ConditionTypes.COVER]: cover,
      [ConditionTypes.PLAYLIST]: playlist,
      [ConditionTypes.INSPIRATION]: inspiration,
      ...otherUntimedConditions
    } = state.global.untimedConditions;
    state = setIn(
      state,
      ['global', 'untimedConditions'],
      otherUntimedConditions
    );

    state = setOneUntimedCondition(ConditionTypes.COVER, { clipId: clip.id })(
      state
    );

    return state;
  };

export default coverClip;
