import { useState, useEffect } from 'react'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { Card, CardContent } from '@/components/ui/card'; import { PlusCircle, ClipboardList, TrendingUp, CheckCircle2, Clock, ArrowLeft, Zap, Blocks, Wallet, UserCheck, Store } from 'lucide-react'; import { AdList } from './AdList'; import { CreateAd } from './CreateAd'; import { NotificationBell } from './NotificationBell'; import { QuickFilterBar } from './OrderFilters'; import { InternalBalanceCard } from './InternalBalanceCard'; import { DepositModal } from './DepositModal'; import { WithdrawModal } from './WithdrawModal'; import { ExpressMode } from './ExpressMode'; import { BlockTrade } from './BlockTrade'; import { MyTrades } from './MyTrades'; import { TradeDetail } from './TradeDetail'; import { DEFAULT_FILTERS, type P2PFilters } from './types'; import { useAuth } from '@/contexts/AuthContext'; import { supabase } from '@/lib/supabase'; type View = 'main' | 'create-ad' | 'my-trades' | 'trade-detail'; interface UserStats { activeTrades: number; completedTrades: number; totalVolume: number; } export function P2PDashboard() { const [view, setView] = useState('main'); const [selectedTradeId, setSelectedTradeId] = useState(null); const [userStats, setUserStats] = useState({ activeTrades: 0, completedTrades: 0, totalVolume: 0 }); const [filters, setFilters] = useState(DEFAULT_FILTERS); const [showDepositModal, setShowDepositModal] = useState(false); const [showWithdrawModal, setShowWithdrawModal] = useState(false); const [balanceRefreshKey, setBalanceRefreshKey] = useState(0); const { user, isLoading, error, login } = useAuth(); const handleBalanceUpdated = () => { setBalanceRefreshKey(prev => prev + 1); }; const handleTradeStarted = (tradeId: string) => { setSelectedTradeId(tradeId); setView('trade-detail'); }; // Fetch user stats useEffect(() => { const fetchStats = async () => { if (!user) return; try { const { count: activeCount } = await supabase .from('p2p_fiat_trades') .select('*', { count: 'exact', head: true }) .or(`seller_id.eq.${user.id},buyer_id.eq.${user.id}`) .in('status', ['pending', 'payment_sent']); const { count: completedCount } = await supabase .from('p2p_fiat_trades') .select('*', { count: 'exact', head: true }) .or(`seller_id.eq.${user.id},buyer_id.eq.${user.id}`) .eq('status', 'completed'); const { data: trades } = await supabase .from('p2p_fiat_trades') .select('fiat_amount') .or(`seller_id.eq.${user.id},buyer_id.eq.${user.id}`) .eq('status', 'completed'); const totalVolume = trades?.reduce((sum, t) => sum + (t.fiat_amount || 0), 0) || 0; setUserStats({ activeTrades: activeCount || 0, completedTrades: completedCount || 0, totalVolume, }); } catch (err) { console.error('Fetch stats error:', err); } }; fetchStats(); }, [user]); // Loading state if (isLoading) { return (

Connecting...

); } // Not authenticated if (!user) { return (

P2P Trading

Trade crypto with local currency securely via Telegram.

{error && (

{error}

)}
); } // Trade detail view if (view === 'trade-detail' && selectedTradeId) { return (
); } // My trades view if (view === 'my-trades') { return (

My Trades

{ setSelectedTradeId(id); setView('trade-detail'); }} />
); } // Create ad view if (view === 'create-ad') { return (

Create Ad

setView('main')} />
); } // Main dashboard view return (
{/* Header */}

P2P Trading

{/* Balance Card */} setShowDepositModal(true)} onWithdraw={() => setShowWithdrawModal(true)} /> {/* Quick Stats */}

{userStats.activeTrades}

Active

{userStats.completedTrades}

Done

${userStats.totalVolume > 1000 ? `${(userStats.totalVolume / 1000).toFixed(1)}K` : userStats.totalVolume}

Volume

{/* Quick Actions */}
{/* Filter Bar */} {/* Main Tabs */} Express Buy Sell OTC
{/* Modals */} setShowDepositModal(false)} onSuccess={handleBalanceUpdated} /> setShowWithdrawModal(false)} onSuccess={handleBalanceUpdated} />
); }