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

import { useLokaliseTranslation } from 'src/utils/i18n';
import { type NpsSurveySubmissionPayload } from 'src/types/nps';

import { type NpsSurveyForm } from '../types';
import useFinalizeNpsSurvey from './useFinalizeNpsSurvey';
import useReportNpsFormClosure from './useReportNpsFormClosure';

const useNpsSurveyForm = () => {
  const { t } = useLokaliseTranslation('backoffice_only');
  const { enqueueSnackbar } = useSnackbar();

  const { mutate: submitNpsSurvey, isLoading } = useFinalizeNpsSurvey();
  const { mutate: reportFormClosure } = useReportNpsFormClosure();

  const submitSurveyForm = (args: {
    formValues: NpsSurveyForm;
    onSuccess: () => void;
  }) => {
    const { formValues, onSuccess } = args;
    const payload: NpsSurveySubmissionPayload = {
      answers: [
        {
          score: formValues.customerSuccessRating,
          comment: formValues.customerSuccessComment,
        },
        {
          score: formValues.supportRating,
          comment: formValues.supportComment,
        },
        {
          score: formValues.platformRating,
          comment: formValues.platformComment,
        },
      ],
    };

    submitNpsSurvey(payload, {
      onSuccess,
      onError: () => {
        enqueueSnackbar({
          title: t('nps_survey_flow_dialog.sending_error_toast'),
          variant: 'error',
        });
      },
    });
  };

  return {
    submitSurveyForm,
    omitSurveyForm: reportFormClosure,
    isSubmitting: isLoading,
  };
};

export default useNpsSurveyForm;
