import { useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { Button } from '@/components/ui/button'; // import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Badge } from '@/components/ui/badge'; import { useToast } from '@/hooks/use-toast'; import { supabase } from '@/lib/supabase'; import { Users, Settings, Activity, Shield, Bell, Monitor, Lock, AlertTriangle, ArrowLeft } from 'lucide-react'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select'; import { SessionMonitor } from '@/components/security/SessionMonitor'; import { PermissionEditor } from '@/components/security/PermissionEditor'; import { SecurityAudit } from '@/components/security/SecurityAudit'; import { KycApprovalTab } from '@/components/admin/KycApprovalTab'; import { CommissionVotingTab } from '@/components/admin/CommissionVotingTab'; import { CommissionSetupTab } from '@/components/admin/CommissionSetupTab'; import { DisputeResolutionPanel } from '@/components/admin/DisputeResolutionPanel'; import { Gavel } from 'lucide-react'; export default function AdminPanel() { const navigate = useNavigate(); const { t } = useTranslation(); const [users, setUsers] = useState>>([]); const [adminRoles, setAdminRoles] = useState>>([]); const [loading, setLoading] = useState(true); const { toast } = useToast(); useEffect(() => { loadAdminData(); }, []); const loadAdminData = async () => { try { // Load users const { data: profiles } = await supabase .from('profiles') .select('*') .order('created_at', { ascending: false }); // Load admin roles const { data: roles } = await supabase .from('admin_roles') .select('*'); setUsers(profiles || []); setAdminRoles(roles || []); } catch (error) { if (import.meta.env.DEV) console.error('Error loading admin data:', error); } finally { setLoading(false); } }; const updateUserRole = async (userId: string, role: string) => { try { if (role === 'none') { await supabase .from('admin_roles') .delete() .eq('user_id', userId); } else { await supabase .from('admin_roles') .upsert({ user_id: userId, role, updated_at: new Date().toISOString() }); } toast({ title: 'Success', description: 'User role updated successfully', }); loadAdminData(); } catch (error) { if (import.meta.env.DEV) console.error('Error updating role:', error); toast({ title: 'Error', description: 'Failed to update user role', variant: 'destructive', }); } }; const sendNotification = async (userId: string) => { const title = prompt('Notification Title:'); const message = prompt('Notification Message:'); if (!title || !message) return; try { const { error } = await supabase.functions.invoke('notifications-manager', { body: { action: 'create', userId, title, message, type: 'info' } }); if (error) throw error; toast({ title: 'Success', description: 'Notification sent successfully', }); } catch (error) { if (import.meta.env.DEV) console.error('Error sending notification:', error); toast({ title: 'Error', description: 'Failed to send notification', variant: 'destructive', }); } }; const getUserRole = (userId: string) => { const role = adminRoles.find(r => r.user_id === userId); return role?.role || 'none'; }; if (loading) { return
{t('admin.loading')}
; } return (

{t('admin.title')}

{t('admin.commissionSetup')} {t('admin.kycApprovals')} Commission
Voting
P2P
Disputes
Users Roles Sessions Permissions Security Activity Settings
{t('admin.userManagement')} {t('admin.username')} {t('admin.email')} {t('admin.verified')} {t('admin.roleUser')} {t('admin.actions')} {users.map((user) => ( {user.username} {user.email} {user.email_verified ? t('admin.verified') : t('admin.unverified')} ))}
{t('admin.adminRoles')}
{adminRoles.map((role) => { const user = users.find(u => u.id === role.user_id); return (

{user?.username}

{user?.email}

{role.role}
); })}
{t('admin.recentActivity')}

Activity logs will be displayed here

{t('admin.systemSettings')}
); }