import { useMemo } from 'react'; import type { CalcuttaRoundProps, CalcuttaAuctionItemProps, CalcuttaItemResultProps, CalcuttaPayoutRuleProps, } from '@bettoredge/types'; export interface RoundResultSummary { round: CalcuttaRoundProps; advanced_items: CalcuttaAuctionItemProps[]; eliminated_items: CalcuttaAuctionItemProps[]; payout_rule?: CalcuttaPayoutRuleProps; total_payout: number; /** Prize description for this round (sweepstakes only) */ prize_description?: string; /** Prize image for this round (sweepstakes only) */ prize_image?: { url: string }; } export const useCalcuttaResults = ( rounds: CalcuttaRoundProps[], items: CalcuttaAuctionItemProps[], item_results: CalcuttaItemResultProps[], payout_rules: CalcuttaPayoutRuleProps[] ) => { const roundSummaries = useMemo((): RoundResultSummary[] => { return rounds.map(round => { const roundResults = item_results.filter(r => r.round_number === round.round_number); const advancedIds = roundResults.filter(r => r.result === 'advanced' || r.result === 'won').map(r => r.calcutta_auction_item_id); const eliminatedIds = roundResults.filter(r => r.result === 'eliminated').map(r => r.calcutta_auction_item_id); const rule = payout_rules.find(r => r.payout_type === 'round' && r.round_number === round.round_number); const totalPayout = roundResults.reduce((sum, r) => sum + Number(r.payout_earned), 0); return { round, advanced_items: items.filter(i => advancedIds.includes(i.calcutta_auction_item_id)), eliminated_items: items.filter(i => eliminatedIds.includes(i.calcutta_auction_item_id)), payout_rule: rule, total_payout: totalPayout, prize_description: round.prize_description, prize_image: round.prize_image, }; }); }, [rounds, items, item_results, payout_rules]); const itemPerformance = useMemo(() => { return items.map(item => { const results = item_results.filter(r => r.calcutta_auction_item_id === item.calcutta_auction_item_id); const totalEarned = results.reduce((sum, r) => sum + Number(r.payout_earned), 0); const lastResult = results[results.length - 1]; return { item, results, total_earned: totalEarned, rounds_survived: results.filter(r => r.result === 'advanced' || r.result === 'won').length, final_result: lastResult?.result, }; }); }, [items, item_results]); return { roundSummaries, itemPerformance }; };