'use client' import { useEffect, useState } from 'react' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Textarea } from '@/components/ui/textarea' import { Badge } from '@/components/ui/badge' import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/dialog' import { DollarSign, Download, Clock, CheckCircle, XCircle } from 'lucide-react' import { toast } from 'sonner' import { Loading } from '@/components/ui/loading' interface Payout { id: string amount: number status: string bankDetails: string adminNotes?: string createdAt: string updatedAt: string } export default function PayoutsPage() { const [payouts, setPayouts] = useState([]) const [loading, setLoading] = useState(true) const [requesting, setRequesting] = useState(false) const [amount, setAmount] = useState('') const [bankDetails, setBankDetails] = useState('') const [currentBalance, setCurrentBalance] = useState(0) useEffect(() => { fetchPayouts() fetchBalance() }, []) const fetchPayouts = async () => { try { const response = await fetch('/api/payouts') if (response.ok) { const data = await response.json() setPayouts(data) } } catch (error) { console.error('Error fetching payouts:', error) } finally { setLoading(false) } } const fetchBalance = async () => { try { const response = await fetch('/api/dashboard') if (response.ok) { const data = await response.json() setCurrentBalance(data.stats.currentBalance) } } catch (error) { console.error('Error fetching balance:', error) } } const handleRequestPayout = async () => { if (!amount || !bankDetails) { toast.error('Please fill in all fields') return } const payoutAmount = parseFloat(amount) if (payoutAmount <= 0 || payoutAmount > currentBalance) { toast.error('Invalid payout amount') return } setRequesting(true) try { const response = await fetch('/api/payouts', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ amount: payoutAmount, bankDetails, }), }) if (response.ok) { toast.success('Payout request submitted successfully') setAmount('') setBankDetails('') fetchPayouts() fetchBalance() } else { const error = await response.json() toast.error(error.error || 'Failed to submit payout request') } } catch (error) { console.error('Error requesting payout:', error) toast.error('Something went wrong') } finally { setRequesting(false) } } const getStatusIcon = (status: string) => { switch (status) { case 'PENDING': return case 'APPROVED': return case 'REJECTED': return case 'PAID': return default: return } } const getStatusColor = (status: string) => { switch (status) { case 'PENDING': return 'bg-yellow-100 text-yellow-800' case 'APPROVED': return 'bg-green-100 text-green-800' case 'REJECTED': return 'bg-red-100 text-red-800' case 'PAID': return 'bg-blue-100 text-blue-800' default: return 'bg-gray-100 text-gray-800' } } if (loading) { return (
) } return (

Payout Management

Request withdrawals and track your payout history

{/* Balance Card */} Available Balance Request Payout Enter the amount you want to withdraw and your bank details
setAmount(e.target.value)} max={currentBalance} />

Available: ₹{currentBalance.toFixed(2)}