import { useMutation, useQueryClient } from '@tanstack/react-query';
import { api } from '@/api/client';
import { keys } from '@/api/workflows';
import type { ExportResult, ImportPreview, ImportResult } from '@/types';

/**
 * Workflow import and export. See app/Transfer/WorkflowTransfer__premium_only.php.
 */

/** A file of the given workflows, or of every workflow when none are given. */
export async function exportWorkflows(ids: number[]): Promise<ExportResult> {
  const query = ids.length > 0 ? `?ids=${ids.join(',')}` : '';

  return (await api.get<ExportResult>(`/workflows/export${query}`)).data;
}

export function usePreviewImport() {
  return useMutation({
    mutationFn: async (document: unknown) => (await api.post<ImportPreview>('/workflows/import/preview', { document })).data,
  });
}

export function useImportWorkflows() {
  const client = useQueryClient();

  return useMutation({
    mutationFn: async ({ document, indexes }: { document: unknown; indexes: number[] }) =>
      (await api.post<ImportResult>('/workflows/import', { document, indexes })).data,
    onSuccess: () => {
      void client.invalidateQueries({ queryKey: keys.workflows });
    },
  });
}
