import type { RewardItem, RewardCategory } from '../types/payment.types'; export const REWARD_PRIORITY: RewardCategory[] = ['special', 'general']; export const parseRewardAmount = (amount: number | string): number => { const value = typeof amount === 'string' ? parseFloat(amount) : amount; return Number.isFinite(value) ? value : 0; }; export const getCappedRewardAmounts = ( selected: RewardItem[], payableAmount?: string | number | null ): Record => { const parsedPayable = payableAmount != null ? parseRewardAmount(payableAmount) : NaN; let remaining = Number.isFinite(parsedPayable) ? parsedPayable : Infinity; const result: Record = { special: 0, general: 0 }; REWARD_PRIORITY.forEach((type) => { const picked = selected.find((item) => item.type === type); if (!picked) return; const value = parseRewardAmount(picked.amount); if (value <= 0) return; const used = Math.min(value, remaining); remaining = Math.max(remaining - used, 0); result[type] = used; }); return result; }; export const getCappedRewardTotal = ( selected: RewardItem[], payableAmount?: string | number | null ): number => { const amounts = getCappedRewardAmounts(selected, payableAmount); return REWARD_PRIORITY.reduce((sum, type) => sum + amounts[type], 0); };