import { useModal } from '@material-hu/hooks/useModal';

import HuDialog from '@material-hu/components/design-system/Dialog';

import useUsers from 'src/hooks/queryHooks/useUsers';
import { CriteriaType } from 'src/types/audience';
import { useLokaliseTranslation } from 'src/utils/i18n';

import { useCriteria } from '../criteriaContext';
import { getAudienceInternalId } from '../utils';

type UseAllUsersConfirmationModalOptions = {
  excludeDeactivatedUsers?: boolean;
};

const useAllUsersConfirmationModal = (
  onClose?: () => void,
  options?: UseAllUsersConfirmationModalOptions,
) => {
  const { excludeDeactivatedUsers = false } = options ?? {};
  const { setCriteriaSelected } = useCriteria();
  const { t } = useLokaliseTranslation(['audience']);
  const { data: count = 0 } = useUsers(
    {
      limit: 1,
      page: 1,
      ...(excludeDeactivatedUsers
        ? { onlyActiveAndUnclaimedPublicUsers: true }
        : {}),
    },
    { select: data => data.data.count },
  );

  const { closeModal, ...modalProps } = useModal(
    HuDialog,
    {},
    {
      title: t('all_users_confirmation_title'),
      textBody: t('all_users_confirmation_description'),
      primaryButtonProps: {
        children: t('general:continue'),
        onClick: () => {
          setCriteriaSelected([
            {
              id: getAudienceInternalId(),
              type: CriteriaType.ALL_USERS,
              itemIds: [],
              usersCount: count,
            },
          ]);
          onClose?.();
          closeModal();
        },
      },
      secondaryButtonProps: {
        children: t('general:cancel'),
        onClick: () => {
          onClose?.();
          closeModal();
        },
      },
    },
  );

  return modalProps;
};

export default useAllUsersConfirmationModal;
