import { useCallback } from 'react';

import { useStores } from '@/app/(root)/AppProviders';
import { useApiClient } from '@/lib/apiClient';
import { Clip } from '@/state/clipStore';

export type ConcatParams = {
  clipId: string;
  isInfill: boolean;
  projectId: string | null;
  // params to adjust infil timing go here
};

export async function concat(
  apiClient: ReturnType<typeof useApiClient>,
  editSessionId: string | null,
  concatParams: ConcatParams
) {
  const { data, error } = await apiClient.POST('/api/generate/concat/v2/', {
    body: {
      clip_id: concatParams.clipId,
      is_infill: concatParams.isInfill,
      project_id: concatParams.projectId,
      ...(editSessionId ? { edit_session_id: editSessionId } : {}),
    },
  });

  if (error) {
    throw error;
  }

  return data as any as Clip;
}

export default function useConcat() {
  const { session, edit } = useStores();

  return useCallback(
    async (params: ConcatParams) => {
      const result = await concat(
        session.apiClient,
        edit.editSessionId,
        params
      );

      return result;
    },
    [edit.editSessionId, session.apiClient]
  );
}
