'use client' import { useState, useEffect, useCallback } from 'react' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { Button } from '@/components/ui/button' import { Badge } from '@/components/ui/badge' import { Input } from '@/components/ui/input' import { Textarea } from '@/components/ui/textarea' import { Wallet, DollarSign, TrendingUp, ArrowLeft, Download, Plus, Minus, CreditCard, Calendar } from 'lucide-react' import { motion } from 'framer-motion' import { toast } from 'sonner' import Link from 'next/link' import { DashboardHeader } from '@/components/dashboard/DashboardHeader' interface WalletData { balance: number totalEarnings: number totalWithdrawn: number transactions: { id: string type: 'COMMISSION' | 'PAYOUT' | 'WITHDRAWAL' amount: number description: string status: string createdAt: string }[] } export default function WalletPage() { const [walletData, setWalletData] = useState(null) const [loading, setLoading] = useState(true) const [withdrawalAmount, setWithdrawalAmount] = useState('') const [bankDetails, setBankDetails] = useState('') const [requesting, setRequesting] = useState(false) const fetchWalletData = useCallback(async () => { try { const response = await fetch('/api/dashboard/wallet') const data = await response.json() setWalletData(data) } catch (error) { console.error('Error fetching wallet data:', error) toast.error('Failed to load wallet data') } finally { setLoading(false) } }, []) useEffect(() => { fetchWalletData() }, [fetchWalletData]) const handleWithdrawalRequest = async () => { const amount = parseFloat(withdrawalAmount) if (!amount || amount <= 0) { toast.error('Please enter a valid amount') return } if (amount > (walletData?.balance || 0)) { toast.error('Insufficient balance') return } if (!bankDetails.trim()) { toast.error('Please provide bank details') return } setRequesting(true) try { const response = await fetch('/api/dashboard/payouts', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ amount, bankDetails }) }) if (!response.ok) throw new Error('Failed to request withdrawal') toast.success('Withdrawal request submitted successfully') setWithdrawalAmount('') setBankDetails('') fetchWalletData() } catch (error) { toast.error('Failed to submit withdrawal request') } finally { setRequesting(false) } } if (loading) { return (
) } return (
{/* Header */} } actions={ } /> {/* Wallet Stats */}

Available Balance

₹{walletData?.balance.toFixed(2) || '0.00'}

Total Earnings

₹{walletData?.totalEarnings.toFixed(2) || '0.00'}

Total Withdrawn

₹{walletData?.totalWithdrawn.toFixed(2) || '0.00'}

{/* Withdrawal Request */} Request Withdrawal
setWithdrawalAmount(e.target.value)} max={walletData?.balance || 0} />

Available: ₹{walletData?.balance.toFixed(2) || '0.00'}