import { IGem, IJoliCoin } from '@/common/rewards/type'; import { rewardsCommands } from '../rewards-command'; import { unlockOptionsHandler } from '@/common/rewards/registers/utils/common'; import { createEventPromiseHandler } from '../../event-listener'; import { IUseModalResultEvent, UseModalResultEventName } from '@/common/rewards/reward-emitter'; import { rewardsEmitter, UseModalEventName } from '@/common/rewards/reward-emitter'; import { CURRENCY_HANDLERS } from './currency-handlers'; export const registerUseJolicoinCommand = ( prefix: 'JOLI_COIN' | 'ADS-JOLI_COIN' | 'JOLI_GEM' | 'ADS-JOLI_GEM', currency: 'JOLI_COIN' | 'JOLI_GEM', params: { showUnlockWithCurrencyModal: (params: { enableAutoDeduct: boolean; userCurrency: T; quantity: number; currency: T extends IJoliCoin ? 'JOLI_COIN' : 'JOLI_GEM'; }) => Promise<'CONFIRM' | 'CANCEL' | 'FAILED'>; } ) => { const { showUnlockWithCurrencyModal } = params; rewardsCommands.registerCommand(`Rewards.${prefix}.useJolicoin`, async () => { const unlockOptions = await unlockOptionsHandler.getData(); // Use currency handler for unified logic const handler = CURRENCY_HANDLERS[currency]; const currentUser = handler.getCurrentUser(unlockOptions); const joliCoinQuantity = handler.getQuantity(unlockOptions); const enableAutoDeduct = !!currentUser?.enableAutoDeduct; console.log('-----unlockOptions usemodal-----', unlockOptions, enableAutoDeduct, joliCoinQuantity); const shouldUnlock = await showUnlockWithCurrencyModal({ enableAutoDeduct, userCurrency: currentUser as T, quantity: joliCoinQuantity, currency: currency as T extends IJoliCoin ? 'JOLI_COIN' : 'JOLI_GEM' }); if (shouldUnlock !== 'CONFIRM') { return { result: 'FAILED' }; } return { result: 'SUCCESS' }; }); }; // EVENTS export const createShowUnlockWithCurrencyModal = ( type: 'JOLI_COIN' | 'ADS-JOLI_COIN' | 'JOLI_GEM' | 'ADS-JOLI_GEM', buttons: { confirmButtonText: string; cancelButtonText: string; } ) => { return async (params: { enableAutoDeduct: boolean; userCurrency: T; quantity: number; currency: T extends IJoliCoin ? 'JOLI_COIN' : 'JOLI_GEM'; }) => { const modalHandler = createEventPromiseHandler( rewardsEmitter, UseModalResultEventName ); rewardsEmitter.emit(UseModalEventName, type, { enableAutoDeduct: params.enableAutoDeduct, userCurrency: params.userCurrency as T, quantity: params.quantity, currency: params.currency, confirmButtonText: buttons.confirmButtonText, cancelButtonText: buttons.cancelButtonText }); const modalResult = await modalHandler.getFreshData(); return modalResult.useModalResult; }; };