import { useMemo } from 'react';

import { Clip } from '@/state/clipStore';

import { getInfillClipBounds } from '../PreviewClipContext';
import useEditorLyricsQuery from '../queryHooks/useEditorLyricsQuery';
import { shiftLyrics } from '../shiftLyrics';
import { AlignedLyric } from '../types';
import splitLyrics from './splitLyrics';

export default function useEditPreviewLyrics(
  clip: Clip | null,
  previewClip: Clip | null
) {
  const clipLyrics = useEditorLyricsQuery(clip?.id || null);
  const previewClipLyrics = useEditorLyricsQuery(previewClip?.id || null);

  return useMemo<AlignedLyric[] | null>(() => {
    if (!clip) {
      return null;
    }
    if (!previewClip || !previewClipLyrics.query.data) {
      return null;
    }
    if (previewClip.metadata?.infill) {
      const infillRange = getInfillClipBounds(clip, previewClip);
      const firstSectionCutoff = infillRange.infillStartSecondsWithInset;
      const lastSectionCutoff = infillRange.infillEndSecondsWithInset;
      const clipLyricsSplit = splitLyrics(
        clipLyrics.query.data || [],
        firstSectionCutoff,
        lastSectionCutoff
      );
      return [
        ...clipLyricsSplit[0],
        ...shiftLyrics(
          previewClipLyrics.query.data,
          infillRange.infillStartSeconds
        ),
        ...shiftLyrics(clipLyricsSplit[2], infillRange.addedTimeSeconds),
      ];
    }
    return null;
  }, [clip, previewClip, clipLyrics.query.data, previewClipLyrics.query.data]);
}
