"use client" import { createContext, useCallback, useContext, useEffect } from "react" import { logger } from "@scandic-hotels/common/logger" import { trpc } from "@scandic-hotels/trpc/client" import { getFirstRedeemableCoupon } from "@/utils/rewards" import type { Reward } from "@scandic-hotels/trpc/types/rewards" import type { RedeemFlowContext } from "@/types/components/myPages/myPage/accountPage" export const RedeemContext = createContext({ redeemStep: "initial", setRedeemStep: () => undefined, defaultTimeRemaining: 0, timeRemaining: 0, setTimeRemaining: () => undefined, }) export default function useRedeemFlow() { const { redeemStep, setRedeemStep, defaultTimeRemaining, timeRemaining, setTimeRemaining, } = useContext(RedeemContext) const update = trpc.contentstack.rewards.redeem.useMutation<{ rewards: Reward[] }>() const onRedeem = useCallback( (reward: Reward) => { const coupon = getFirstRedeemableCoupon(reward) update.mutate( { rewardId: reward.id, couponCode: coupon.couponCode }, { onSuccess() { setRedeemStep("redeemed") }, onError(error) { logger.error("Failed to redeem", error) }, } ) }, [update, setRedeemStep] ) useEffect(() => { if (redeemStep === "initial") { setTimeRemaining(defaultTimeRemaining) } }, [redeemStep, setTimeRemaining, defaultTimeRemaining]) return { onRedeem, redeemStep, setRedeemStep, isRedeeming: update.isPending, timeRemaining, setTimeRemaining, } }