import { getSecondsFromZero } from '@suno/studiokit/timeMapping';

import { getDownbeatsFromTiming } from '@/components/edit2025/getTimingFromDownbeats';
import { ApiClient } from '@/lib/apiClient';
import { encodeTimeFormat } from '@/utils/utils';

import { getDerivedTiming } from '../selectors';
import { StudioProjectState } from '../types';
import renderState, { getRenderStateKey } from './renderState';

export default async function renderAuxiliaryClip({
  title,
  apiClient,
  state,
  projectId,
  fromStudioProjectId,
  startBeats,
  endBeats,
  lyrics,
  offsetDownbeatsSeconds,
}: {
  title?: string;
  apiClient: ApiClient;
  state: StudioProjectState;
  projectId?: string;
  fromStudioProjectId: string;
  startBeats: number;
  endBeats: number;
  lyrics: string;
  offsetDownbeatsSeconds?: number;
}) {
  let downbeats = getDownbeatsFromTiming(
    getDerivedTiming(state),
    startBeats,
    endBeats
  );

  if (offsetDownbeatsSeconds) {
    downbeats = downbeats.map(([seconds, beats]) => [
      seconds + offsetDownbeatsSeconds,
      beats,
    ]);
  }

  let effectiveTitle = title;

  if (!title) {
    effectiveTitle = `${state.title || 'Untitled Project'} [${encodeTimeFormat(getSecondsFromZero(startBeats, getDerivedTiming(state)))} - ${encodeTimeFormat(getSecondsFromZero(endBeats, getDerivedTiming(state)))}]`;
  }

  return await renderState({
    title: effectiveTitle,
    apiClient: apiClient,
    state,
    projectId,
    fromStudioProjectId,
    startBeats,
    endBeats,
    lyrics,
    downbeats,
    cacheKey: getRenderStateKey(state, startBeats, endBeats),
  });
}
