'use client'; import { useState, useEffect } from 'react'; import { useAuth } from '../context/AuthContext'; import Header from '../components/Header'; import RewardCard from '../components/RewardCard'; import { fetchInventoryItems, getRewardById, type InventoryItem, type Reward, formatDate } from '../lib/rewards'; interface InventoryItemWithReward extends InventoryItem { reward: Reward | null; } export default function InventoryPage() { const { user } = useAuth(); const [inventoryItems, setInventoryItems] = useState([]); const [isLoading, setIsLoading] = useState(true); const [error, setError] = useState(null); const [selectedItem, setSelectedItem] = useState(null); const [showRedeemModal, setShowRedeemModal] = useState(false); const [showTradeModal, setShowTradeModal] = useState(false); useEffect(() => { const loadInventory = async () => { if (!user?.uid) return; setIsLoading(true); setError(null); try { // Fetch inventory items const items = await fetchInventoryItems(user.uid); // Fetch reward details for each item const itemsWithRewards = await Promise.all( items.map(async (item) => { try { const reward = await getRewardById(item.reward_id); return { ...item, reward }; } catch (error) { console.error(`Error fetching reward ${item.reward_id}:`, error); return { ...item, reward: null }; } }) ); setInventoryItems(itemsWithRewards); } catch (err) { console.error('Error loading inventory:', err); setError(err instanceof Error ? err.message : 'Failed to load inventory'); } finally { setIsLoading(false); } }; loadInventory(); }, [user?.uid]); const handleRedeem = (item: InventoryItemWithReward) => { setSelectedItem(item); setShowRedeemModal(true); }; const handleTrade = (item: InventoryItemWithReward) => { setSelectedItem(item); setShowTradeModal(true); }; const handleRedeemConfirm = () => { // TODO: Implement redeem functionality console.log('Redeeming item:', selectedItem); alert('Redeem functionality coming soon!'); setShowRedeemModal(false); setSelectedItem(null); }; const handleTradeConfirm = () => { // TODO: Implement trade functionality console.log('Trading item:', selectedItem); alert('Trade functionality coming soon!'); setShowTradeModal(false); setSelectedItem(null); }; if (!user) { return ( <>

Access Denied

Please sign in to view your inventory.

); } return ( <>
{/* Page Header */}

My Inventory

Manage your collected rewards and items

{/* Loading State */} {isLoading && (

Loading your inventory...

)} {/* Error State */} {error && (

Oops!

{error}

)} {/* Inventory Grid */} {!isLoading && !error && ( <> {inventoryItems.length === 0 ? (
📦

Empty Inventory

You haven't collected any rewards yet.

) : (
{inventoryItems.map((item) => (
{/* Reward Card */} {item.reward ? ( ) : (

Reward details unavailable

)} {/* Item Details */}
Receipt ID: {item.id}
Unlocked: {formatDate(item.unlocked_on)}
{/* Action Buttons */}
))}
)} )}
{/* Redeem Modal */} {showRedeemModal && selectedItem && (
🎁

Redeem Item

Are you sure you want to redeem this item?

{selectedItem.reward && (
)}
)} {/* Trade Modal */} {showTradeModal && selectedItem && (
🔄

Trade Item

Are you sure you want to trade this item?

{selectedItem.reward && (
)}
)} ); }