import {useTranslation} from 'react-i18next';
import {useNavigation} from '@react-navigation/native';
import {
  FormTaskDetail as FormTaskDetailType,
  SourceModule,
} from '@modules/employeeLifecycle/interfaces';
import {Screens} from '@shared/constants';

import {TaskDetailProps} from '../../interfaces';
import {BaseTaskDetail} from '../BaseTaskDetail';

const getNavigationScreensBasedOnSource = (
  source: SourceModule,
): {
  formTaskScreen: Screens.ONBOARDINGS_FORM_TASK | Screens.TASKS_FORM_TASK;
  answeredFormScreen:
    | Screens.ONBOARDINGS_ANSWERED_FORM
    | Screens.TASKS_ANSWERED_FORM;
} => {
  if (source === 'ONBOARDINGS') {
    return {
      formTaskScreen: Screens.ONBOARDINGS_FORM_TASK,
      answeredFormScreen: Screens.ONBOARDINGS_ANSWERED_FORM,
    };
  } else {
    return {
      formTaskScreen: Screens.TASKS_FORM_TASK,
      answeredFormScreen: Screens.TASKS_ANSWERED_FORM,
    };
  }
};

export function FormTaskDetail({task, source, ...rest}: TaskDetailProps) {
  const {t} = useTranslation();
  const navigation = useNavigation();

  const {formTaskScreen, answeredFormScreen} =
    getNavigationScreensBasedOnSource(source);
  const formTask = task as FormTaskDetailType;

  const onStartQuestionnaire = () => {
    navigation.navigate(formTaskScreen, {
      taskId: formTask?.id,
      formTag: formTask?.task.formTag,
      progressionId: formTask?.taskInfo.progressionId,
    });
  };

  const onSeeMyAnswers = () => {
    navigation.navigate(answeredFormScreen, {
      formAnswerId: Number(formTask?.taskInfo.answerId),
      formAnswerToken: formTask?.taskInfo.token,
      formTag: formTask?.task.formTag,
    });
  };

  return (
    <BaseTaskDetail
      {...rest}
      task={task}
      pendingAction={{
        text: t('employee_lifecycle.questionnaire_form_task.start_button'),
        onPress: onStartQuestionnaire,
      }}
      completedAction={{
        text: t('employee_lifecycle.questionnaire_form_task.see_my_answers'),
        onPress: onSeeMyAnswers,
      }}
    />
  );
}
