'use client'; import { useState, useEffect } from 'react'; import { useSearchParams } from 'next/navigation'; import { useAuth } from '../../context/AuthContext'; import Header from '../../components/Header'; import RewardCard from '../../components/RewardCard'; import { fetchRandomReward, getReceiptId, addInventoryItem, type Reward } from '../../lib/rewards'; export default function SuccessPage() { const { user } = useAuth(); const searchParams = useSearchParams(); const [isOpening, setIsOpening] = useState(true); const [reward, setReward] = useState(null); const [showReward, setShowReward] = useState(false); const [error, setError] = useState(null); const [inventoryStatus, setInventoryStatus] = useState<'pending' | 'success' | 'error'>('pending'); const [receiptId, setReceiptId] = useState(null); const boxId = searchParams.get('box_id'); const sessionId = searchParams.get('session_id'); useEffect(() => { // Simulate box opening animation const timer = setTimeout(async () => { setIsOpening(false); try { // Fetch real random reward from API const randomReward = await fetchRandomReward(); if (randomReward) { setReward(randomReward); setShowReward(true); // Get receipt ID from Stripe if session ID is available if (sessionId) { try { console.log('Getting receipt ID for session:', sessionId); const stripeReceiptId = await getReceiptId(sessionId); if (stripeReceiptId) { setReceiptId(stripeReceiptId); console.log('Got receipt ID from Stripe:', stripeReceiptId); // Add reward to inventory with actual receipt ID if (user?.uid) { try { console.log('Adding reward to inventory:', { receiptId: stripeReceiptId, userId: user.uid, rewardId: randomReward.id }); const success = await addInventoryItem(stripeReceiptId, user.uid, randomReward.id); if (success) { setInventoryStatus('success'); console.log('Reward added to inventory successfully'); } else { setInventoryStatus('error'); setError('Something went wrong'); setShowReward(false); setReward(null); } } catch (inventoryError) { console.error('Error adding to inventory:', inventoryError); setInventoryStatus('error'); setError('Something went wrong'); setShowReward(false); setReward(null); } } } else { console.log('No receipt ID found for session, using session ID as fallback'); // Fallback to using session ID if no receipt ID is found if (user?.uid) { try { const success = await addInventoryItem(sessionId, user.uid, randomReward.id); if (success) { setInventoryStatus('success'); } else { setInventoryStatus('error'); setError('Something went wrong'); setShowReward(false); setReward(null); } } catch (inventoryError) { console.error('Error adding to inventory with fallback:', inventoryError); setInventoryStatus('error'); setError('Something went wrong'); setShowReward(false); setReward(null); } } } } catch (receiptError) { console.error('Error getting receipt ID:', receiptError); // Continue with fallback to session ID if (user?.uid) { try { const success = await addInventoryItem(sessionId!, user.uid, randomReward.id); if (success) { setInventoryStatus('success'); } else { setInventoryStatus('error'); setError('Something went wrong'); setShowReward(false); setReward(null); } } catch (inventoryError) { console.error('Error adding to inventory with fallback:', inventoryError); setInventoryStatus('error'); setError('Something went wrong'); setShowReward(false); setReward(null); } } } } } } catch (err) { console.error('Error fetching random reward:', err); setError(err instanceof Error ? err.message : 'Failed to fetch reward'); } }, 3000); return () => clearTimeout(timer); }, [sessionId, user?.uid]); if (!user) { return ( <>

Access Denied

Please sign in to view this page.

); } // Show only error message if there's an error if (error) { return ( <>

Something went wrong

{error}

); } return ( <>
{/* Success Header */}
🎉

Payment Successful!

Your mystery box is being opened...

{/* Box Opening Animation */} {isOpening && (
🎁

Opening your box...

)} {/* Reward Reveal */} {showReward && reward && (

Congratulations!

You found something amazing!

{/* Reward Card */}
{/* Inventory Status */} {inventoryStatus === 'success' && (

✅ Added to your inventory!

)}
{/* Action Buttons */}
)} {/* Transaction Details */}

Transaction Details

Session ID: {sessionId}
{receiptId && (
Receipt ID: {receiptId}
)}
Box ID: {boxId}
User: {user.email}
{reward && (
Reward ID: {reward.id}
)}
Inventory Status: {inventoryStatus === 'success' ? 'Added' : inventoryStatus === 'error' ? 'Failed' : 'Pending'}
); }