import type { HttpRequest } from '@yaakapp-internal/models';
import { patchModelById } from '@yaakapp-internal/models';
import { createRequestAndNavigate } from '../lib/createRequestAndNavigate';
import { jotaiStore } from '../lib/jotai';
import { invokeCmd } from '../lib/tauri';
import { showToast } from '../lib/toast';
import { activeWorkspaceIdAtom } from './useActiveWorkspace';
import { useFastMutation } from './useFastMutation';
import { wasUpdatedExternally } from './useRequestUpdateKey';

export function useImportCurl() {
  return useFastMutation({
    mutationKey: ['import_curl'],
    mutationFn: async ({
      overwriteRequestId,
      command,
    }: {
      overwriteRequestId?: string;
      command: string;
    }) => {
      const workspaceId = jotaiStore.get(activeWorkspaceIdAtom);
      const importedRequest: HttpRequest = await invokeCmd('cmd_curl_to_request', {
        command,
        workspaceId,
      });

      let verb: string;
      if (overwriteRequestId == null) {
        verb = 'Created';
        await createRequestAndNavigate(importedRequest);
      } else {
        verb = 'Updated';
        await patchModelById(importedRequest.model, overwriteRequestId, (r: HttpRequest) => ({
          ...importedRequest,
          id: r.id,
          createdAt: r.createdAt,
          workspaceId: r.workspaceId,
          folderId: r.folderId,
          name: r.name,
          sortPriority: r.sortPriority,
        }));

        setTimeout(() => wasUpdatedExternally(overwriteRequestId), 100);
      }

      showToast({
        color: 'success',
        message: `${verb} request from Curl`,
      });
    },
  });
}
