import { useSelector } from "react-redux";
import { useMemo } from "react";
import { useFeatureFlags } from "../../featureFlags";
import { hubStateSelector } from "../reducer";
import { usePostOnboardingContext } from "./usePostOnboardingContext";
const getIsFeatureEnabled = (action, getFeature) => {
    if (!action)
        return false;
    if (!action.featureFlagId)
        return true;
    const flag = getFeature(action.featureFlagId);
    if (!flag?.enabled)
        return false;
    return !action.featureFlagParamId || !!flag.params?.[action.featureFlagParamId];
};
/**
 * @returns an object representing the state that should be rendered on the post
 * onboarding hub screen.
 *
 * This takes feature flagging into account so the logic is
 * resistant to flags getting enabled/disabled over time (for a given disabled
 * feature flag, the actions pointing to it will be excluded).
 * */
export function usePostOnboardingHubState() {
    const hubState = useSelector(hubStateSelector);
    const postOnboardingContext = usePostOnboardingContext();
    const { getPostOnboardingAction } = postOnboardingContext;
    const { getFeature } = useFeatureFlags();
    return useMemo(() => {
        if (!getPostOnboardingAction)
            return {
                deviceModelId: hubState.deviceModelId,
                lastActionCompleted: null,
                actionsState: [],
                postOnboardingInProgress: hubState.postOnboardingInProgress,
            };
        const actionsState = hubState.actionsToComplete.flatMap(actionId => {
            const action = getPostOnboardingAction(actionId);
            const isFeatureEnabled = getIsFeatureEnabled(action, getFeature);
            if (!action || !isFeatureEnabled) {
                return [];
            }
            return [{ ...action, completed: !!hubState.actionsCompleted[actionId] }];
        });
        const lastActionCompleted = hubState.lastActionCompleted
            ? getPostOnboardingAction(hubState.lastActionCompleted)
            : null;
        const isLastActionCompletedEnabled = lastActionCompleted && getIsFeatureEnabled(lastActionCompleted, getFeature);
        return {
            deviceModelId: hubState.deviceModelId,
            lastActionCompleted: isLastActionCompletedEnabled ? lastActionCompleted : null,
            actionsState,
            postOnboardingInProgress: hubState.postOnboardingInProgress,
        };
    }, [getFeature, hubState, getPostOnboardingAction]);
}
//# sourceMappingURL=usePostOnboardingHubState.js.map