import { useMutation, useQueryClient } from 'react-query';

import useHuSnackbar from '@material-hu/components/design-system/Snackbar';

import { useLokaliseTranslation } from 'src/utils/i18n';

import { knowledgeBaseKeys } from '../queries';
import {
  updateKnowledgeBaseFile,
  updateKnowledgeBaseFolder,
} from '../services';
import {
  type UpdateKnowledgeBaseFilePayload,
  type UpdateKnowledgeBaseFolderPayload,
} from '../types';

type UpdateType = 'rename' | 'move';

type UpdateFileParams = {
  filename: string;
  payload: UpdateKnowledgeBaseFilePayload;
  type?: UpdateType;
};

type UpdateFolderParams = {
  path: string;
  payload: UpdateKnowledgeBaseFolderPayload;
  type?: UpdateType;
};

export const useUpdateKnowledgeBaseItem = () => {
  const { t } = useLokaliseTranslation('agents');
  const { enqueueSnackbar } = useHuSnackbar();
  const queryClient = useQueryClient();

  const updateFile = useMutation({
    mutationFn: ({ filename, payload }: UpdateFileParams) =>
      updateKnowledgeBaseFile(filename, payload),
    onSuccess: (_, variables) => {
      const isMove = variables.type === 'move';
      enqueueSnackbar({
        title: t(
          isMove
            ? 'knowledge_base.move_drawer.file_success'
            : 'knowledge_base.edit_name_dialog.file_success',
        ),
        variant: 'success',
      });
      queryClient.invalidateQueries(knowledgeBaseKeys.all);
    },
    onError: (_, variables) => {
      const isMove = variables.type === 'move';
      enqueueSnackbar({
        title: t(
          isMove
            ? 'knowledge_base.move_drawer.error'
            : 'knowledge_base.edit_name_dialog.error',
        ),
        variant: 'error',
      });
    },
  });

  const updateFolder = useMutation({
    mutationFn: ({ path, payload }: UpdateFolderParams) =>
      updateKnowledgeBaseFolder(path, payload),
    onSuccess: (_, variables) => {
      const isMove = variables.type === 'move';
      enqueueSnackbar({
        title: t(
          isMove
            ? 'knowledge_base.move_drawer.folder_success'
            : 'knowledge_base.edit_name_dialog.folder_success',
        ),
        variant: 'success',
      });
      queryClient.invalidateQueries(knowledgeBaseKeys.all);
    },
    onError: (_, variables) => {
      const isMove = variables.type === 'move';
      enqueueSnackbar({
        title: t(
          isMove
            ? 'knowledge_base.move_drawer.error'
            : 'knowledge_base.edit_name_dialog.error',
        ),
        variant: 'error',
      });
    },
  });

  return { updateFile, updateFolder };
};
