import { TourType } from "entities/Tour";
import { useDispatch, useSelector } from "react-redux";
import { AppState } from "@appsmith/reducers";
import { getActiveTourIndex, getActiveTourType } from "selectors/tourSelectors";
import { proceedToNextTourStep } from "actions/tourActions";

export const useIsTourStepActive = (
  activeTourStepConfig: { [key in TourType]?: any },
) => {
  const activeTourType = useSelector(getActiveTourType);
  const expectedActiveStep =
    activeTourType &&
    activeTourStepConfig &&
    activeTourStepConfig[activeTourType];

  const isCurrentStepActive = useSelector(
    (state: AppState) => getActiveTourIndex(state) === expectedActiveStep,
  );

  return isCurrentStepActive;
};

const useProceedToNextTourStep = (
  activeTourStepConfig: { [key in TourType]?: any },
) => {
  const dispatch = useDispatch();

  const isActive = useIsTourStepActive(activeTourStepConfig);

  return () => isActive && dispatch(proceedToNextTourStep());
};

export default useProceedToNextTourStep;
