import { useCallback } from 'react';

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

import { Criteria, CriteriaType } from 'src/types/audience';

import { useAllCriteriaDrawerContent } from './useAllCriteriaDrawerContent';
import { useIndividualDrawerContent } from './useIndividualDrawerContent';
import {
  QueryKeys,
  SegmentationCriteriaService,
} from './useSegmentationCriteria';
import { useSegmentationCriteriaDrawerContent } from './useSegmentationCriteriaDrawerContent';

type Props = {
  criteria?: Partial<Criteria>;
  customGetIndividualCriteriaUsers?: SegmentationCriteriaService['customGetIndividualCriteriaUsers'];
  customKeyIndividualCriteriaUsers?: QueryKeys['customKeyIndividualCriteriaUsers'];
  excludeDeactivatedUsersFromCollaboratorQueries?: boolean;
};

const useCriteriaSelection = (props: Props) => {
  const { criteria, excludeDeactivatedUsersFromCollaboratorQueries } = props;
  const drawer = useDrawerV2<{ criteria?: Criteria }>(
    useCallback(
      args => {
        switch (criteria?.type) {
          case CriteriaType.ALL_USERS:
            return useAllCriteriaDrawerContent({ ...args });
          case CriteriaType.INDIVIDUAL_USERS:
            return useIndividualDrawerContent({
              ...args,
              criteria,
              excludeDeactivatedUsersFromCollaboratorQueries,
            });
          case CriteriaType.SEGMENTED_USERS:
            return useSegmentationCriteriaDrawerContent({
              ...args,
              criteria,
              excludeDeactivatedUsersFromCollaboratorQueries,
            });
          default:
            return {};
        }
      },
      [criteria, excludeDeactivatedUsersFromCollaboratorQueries],
    ),
  );

  return drawer;
};

export default useCriteriaSelection;
