import { IHttpClient } from '@/common/http'; import { IAdBreakParams } from '@/common/ads'; import { createCommonGemRewardHandler } from './utils/coins/joligem/gem-handler'; import { unlockOptionsHandler } from './utils/common'; import { createShowUnlockWithCurrencyModal, createInitiateAndAwaitPayment, createShowUnloginModal } from './utils/coins/commands'; export type GemOnlyRewardsHandler = (params: IAdBreakParams) => Promise; export const createGemOnlyRewardHandler = ( httpClient: IHttpClient, { onUnlockSuccess, onUnlockFailed, hasSubscription }: { onUnlockSuccess?: (data: { quantity: number; balance: number }) => void; onUnlockFailed?: () => void; hasSubscription: () => boolean; } ): GemOnlyRewardsHandler => { const handleUnlockFailed = (() => (params: IAdBreakParams) => { onUnlockFailed?.(); params.adBreakDone?.({ breakType: params.type, breakFormat: params.type === 'reward' ? 'reward' : 'interstitial', breakStatus: 'noAdPreloaded' }); })(); const showUnlockWithGemModal = createShowUnlockWithCurrencyModal('JOLI_GEM', { confirmButtonText: 'joligem.useJolicoin', // TODO: change key cancelButtonText: 'jolicoin.noThanks' }); const initiateAndAwaitPayment = createInitiateAndAwaitPayment('JOLI_GEM', { confirmButtonText: 'jolicoin.payAndUnlock', cancelButtonText: 'jolicoin.noThanks' }); const showUnloginModal = createShowUnloginModal('JOLI_GEM', { confirmButtonText: 'loginGuide.login', cancelButtonText: 'loginGuide.noThanks' }); const gemOnlyRewardHandler = createCommonGemRewardHandler('JOLI_GEM', httpClient, { handlers: { handleUnlockSuccess: onUnlockSuccess, handleUnlockFailed, unlockOptionsHandler, initiateAndAwaitPayment, showUnlockWithCurrencyModal: showUnlockWithGemModal, showUnloginModal, hasSubscription } }); return gemOnlyRewardHandler; };