import { IHttpClient } from '@/common/http'; import { IAdBreakParams } from '@/common/ads'; import { unlockOptionsHandler } from './utils/common'; import { createCommonJolicoinRewardHandler } from './utils/coins/jolicoin/jolicoin-handler'; import { createShowUnlockWithCurrencyModal, createInitiateAndAwaitPayment, createShowUnloginModal } from './utils/coins/commands'; export type JolicoinRewardsHandler = (params: IAdBreakParams) => Promise; export const createJolicoinRewardHandler = ( httpClient: IHttpClient, { onUnlockSuccess, onUnlockFailed, hasSubscription }: { onUnlockSuccess?: (data: { quantity: number; balance: number }) => void; onUnlockFailed?: () => void; hasSubscription: () => boolean; } ): JolicoinRewardsHandler => { const handleUnlockFailed = () => { onUnlockFailed?.(); }; const showUnlockWithJolicoinModal = createShowUnlockWithCurrencyModal('ADS-JOLI_COIN', { confirmButtonText: 'jolicoin.useJolicoin', cancelButtonText: 'jolicoin.noWatchAds' }); const initiateAndAwaitPayment = createInitiateAndAwaitPayment('ADS-JOLI_COIN', { confirmButtonText: 'jolicoin.payAndUnlock', cancelButtonText: 'jolicoin.noWatchAds' }); const showUnloginModal = createShowUnloginModal('ADS-JOLI_COIN', { confirmButtonText: 'loginGuide.login', cancelButtonText: 'loginGuide.noWatchAds' }); const jolicoinRewardHandler = createCommonJolicoinRewardHandler('ADS-JOLI_COIN', httpClient, { handlers: { handleUnlockSuccess: onUnlockSuccess, handleUnlockFailed, unlockOptionsHandler, initiateAndAwaitPayment, showUnlockWithCurrencyModal: showUnlockWithJolicoinModal, showUnloginModal, hasSubscription } }); return jolicoinRewardHandler; };