'use client'; import { useState } from 'react'; import { motion, AnimatePresence } from 'framer-motion'; import { User, Mail, Phone, Calendar, Home, DollarSign, Search, Filter, Eye, X, CheckCircle, XCircle, ChevronDown, Users, Award, Clock, TrendingUp, CalendarDays, Shield } from 'lucide-react'; import toast, { Toaster } from 'react-hot-toast'; const FilterDialog = ({ isOpen, onClose, filters, onApplyFilters, onResetFilters }) => { const [localFilters, setLocalFilters] = useState({ ...filters }); const identityTypes = [ { id: 'all', label: 'الكل' }, { id: 'syrian', label: 'هوية سورية' }, { id: 'passport', label: 'جواز سفر' } ]; const bookingRanges = [ { id: 'all', label: 'الكل' }, { id: '0-5', label: '0 - 5 حجوزات' }, { id: '5-10', label: '5 - 10 حجوزات' }, { id: '10-20', label: '10 - 20 حجوزات' }, { id: '20+', label: 'أكثر من 20 حجز' } ]; const spendingRanges = [ { id: 'all', label: 'الكل' }, { id: '0-500000', label: 'أقل من 500,000 ل.س' }, { id: '500000-1000000', label: '500,000 - 1,000,000 ل.س' }, { id: '1000000-5000000', label: '1,000,000 - 5,000,000 ل.س' }, { id: '5000000+', label: 'أكثر من 5,000,000 ل.س' } ]; const dateRanges = [ { id: 'all', label: 'الكل' }, { id: 'today', label: 'اليوم' }, { id: 'week', label: 'آخر 7 أيام' }, { id: 'month', label: 'آخر 30 يوم' }, { id: 'year', label: 'آخر 12 شهر' } ]; const applyFilters = () => { onApplyFilters(localFilters); onClose(); toast.success('تم تطبيق الفلاتر بنجاح'); }; const resetFilters = () => { const resetData = { identityType: 'all', minBookings: '', maxBookings: '', minSpending: '', maxSpending: '', dateRange: 'all', activeOnly: false, inactiveOnly: false }; setLocalFilters(resetData); onResetFilters(); onClose(); toast.success('تم إعادة تعيين الفلاتر'); }; if (!isOpen) return null; return ( e.stopPropagation()} >

تصفية متقدمة

حدد معايير التصفية المطلوبة

{identityTypes.map((type) => ( ))}
setLocalFilters({...localFilters, minBookings: e.target.value})} className="px-4 py-2 border border-gray-300 rounded-xl focus:ring-2 focus:ring-blue-500" /> setLocalFilters({...localFilters, maxBookings: e.target.value})} className="px-4 py-2 border border-gray-300 rounded-xl focus:ring-2 focus:ring-blue-500" />
{bookingRanges.slice(1).map((range) => ( ))}
setLocalFilters({...localFilters, minSpending: e.target.value})} className="px-4 py-2 border border-gray-300 rounded-xl focus:ring-2 focus:ring-blue-500" /> setLocalFilters({...localFilters, maxSpending: e.target.value})} className="px-4 py-2 border border-gray-300 rounded-xl focus:ring-2 focus:ring-blue-500" />
{spendingRanges.slice(1).map((range) => ( ))}
{dateRanges.map((range) => ( ))}
); }; const UserDetailsModal = ({ user, isOpen, onClose }) => { if (!isOpen || !user) return null; const formatCurrency = (amount) => { return amount?.toLocaleString() + ' ل.س'; }; const userBookings = [ { id: 'BK001', property: 'فيلا فاخرة في المزة', startDate: '2024-03-10', endDate: '2024-03-15', amount: 2500000, status: 'completed' }, { id: 'BK002', property: 'شقة حديثة في الشهباء', startDate: '2024-02-20', endDate: '2024-02-25', amount: 1250000, status: 'completed' }, { id: 'BK003', property: 'بيت عائلي في بابا عمرو', startDate: '2024-04-01', endDate: '2024-04-10', amount: 3500000, status: 'confirmed' } ]; return ( e.stopPropagation()} >

تفاصيل المستخدم

{user.name}

معلومات شخصية

الاسم الكامل: {user.name}
البريد الإلكتروني: {user.email}
رقم الهاتف: {user.phone}
تاريخ التسجيل: {user.joinDate}

معلومات الهوية

نوع الهوية: {user.identityType === 'syrian' ? 'هوية سورية' : 'جواز سفر'}
رقم الهوية: {user.identityNumber}
{user.totalBookings}
إجمالي الحجوزات
{user.activeBookings}
حجوزات نشطة
{formatCurrency(user.totalSpent)}
إجمالي المنصرف

سجل الحجوزات

{userBookings.map((booking) => (

{booking.property}

{booking.startDate} - {booking.endDate}
{formatCurrency(booking.amount)}
المبلغ الإجمالي
{booking.status === 'completed' ? 'مكتمل' : 'مؤكد'}
))} {userBookings.length === 0 && (

لا توجد حجوزات سابقة

)}
); }; export default function UsersList() { const [users, setUsers] = useState([ { id: 1, name: 'أحمد محمد', email: 'ahmed@example.com', phone: '0938123456', identityType: 'syrian', identityNumber: '123456789', joinDate: '2024-01-15', totalBookings: 3, activeBookings: 1, totalSpent: 1500000 }, { id: 2, name: 'سارة أحمد', email: 'sara@example.com', phone: '0945123789', identityType: 'passport', identityNumber: 'AB123456', joinDate: '2024-02-10', totalBookings: 2, activeBookings: 0, totalSpent: 500000 } ]); const [searchTerm, setSearchTerm] = useState(''); const [selectedUser, setSelectedUser] = useState(null); const [showFilterDialog, setShowFilterDialog] = useState(false); const [filters, setFilters] = useState({ identityType: 'all', minBookings: '', maxBookings: '', minSpending: '', maxSpending: '', dateRange: 'all', activeOnly: false, inactiveOnly: false }); const applyFilters = (newFilters) => { setFilters(newFilters); }; const resetFilters = () => { setFilters({ identityType: 'all', minBookings: '', maxBookings: '', minSpending: '', maxSpending: '', dateRange: 'all', activeOnly: false, inactiveOnly: false }); setSearchTerm(''); }; const filteredUsers = users.filter(user => { if (searchTerm && !user.name.includes(searchTerm) && !user.email.includes(searchTerm) && !user.phone.includes(searchTerm)) { return false; } if (filters.identityType !== 'all' && user.identityType !== filters.identityType) { return false; } if (filters.minBookings && user.totalBookings < parseInt(filters.minBookings)) { return false; } if (filters.maxBookings && user.totalBookings > parseInt(filters.maxBookings)) { return false; } if (filters.minSpending && user.totalSpent < parseInt(filters.minSpending)) { return false; } if (filters.maxSpending && user.totalSpent > parseInt(filters.maxSpending)) { return false; } if (filters.activeOnly && user.activeBookings === 0) { return false; } if (filters.inactiveOnly && user.activeBookings > 0) { return false; } if (filters.dateRange !== 'all') { const joinDate = new Date(user.joinDate); const today = new Date(); const diffDays = Math.floor((today - joinDate) / (1000 * 60 * 60 * 24)); switch(filters.dateRange) { case 'today': if (joinDate.toDateString() !== today.toDateString()) return false; break; case 'week': if (diffDays > 7) return false; break; case 'month': if (diffDays > 30) return false; break; case 'year': if (diffDays > 365) return false; break; } } return true; }); const filterStats = { total: filteredUsers.length, filtered: filteredUsers.length !== users.length }; const getActiveFiltersCount = () => { let count = 0; if (filters.identityType !== 'all') count++; if (filters.minBookings || filters.maxBookings) count++; if (filters.minSpending || filters.maxSpending) count++; if (filters.dateRange !== 'all') count++; if (filters.activeOnly || filters.inactiveOnly) count++; return count; }; return (
setSearchTerm(e.target.value)} className="w-full pr-12 px-4 py-3 border border-gray-300 rounded-xl focus:outline-none focus:ring-2 focus:ring-blue-500" />
{filterStats.filtered && ( )}
{getActiveFiltersCount() > 0 && (
الفلاتر النشطة: {filters.identityType !== 'all' && ( {filters.identityType === 'syrian' ? 'هوية سورية' : 'جواز سفر'} )} {(filters.minBookings || filters.maxBookings) && ( الحجوزات: {filters.minBookings || '0'} - {filters.maxBookings || '∞'} )} {(filters.minSpending || filters.maxSpending) && ( الإنفاق: {parseInt(filters.minSpending || 0).toLocaleString()} - {parseInt(filters.maxSpending || '∞').toLocaleString()} ل.س )} {filters.dateRange !== 'all' && ( {filters.dateRange === 'today' ? 'اليوم' : filters.dateRange === 'week' ? 'آخر 7 أيام' : filters.dateRange === 'month' ? 'آخر 30 يوم' : 'آخر 12 شهر'} )} {filters.activeOnly && ( لديهم حجوزات نشطة )} {filters.inactiveOnly && ( بدون حجوزات نشطة )}
)}
عرض {filteredUsers.length} مستخدم {filterStats.filtered && ( (من {users.length}) )}
{filteredUsers.map((user, index) => (
{user.name.charAt(0).toUpperCase()}

{user.name}

{user.email}
{user.phone}
{user.identityType === 'syrian' ? 'هوية سورية' : 'جواز سفر'}
{user.totalBookings}
إجمالي الحجوزات
0 ? 'text-green-600' : 'text-gray-400'}`}> {user.activeBookings}
حجوزات نشطة
{user.totalSpent.toLocaleString()}
إجمالي المنصرف
))}
{filteredUsers.length === 0 && (

لا توجد نتائج

لا يوجد مستخدمون يطابقون معايير البحث

{(searchTerm || getActiveFiltersCount() > 0) && ( )}
)} setShowFilterDialog(false)} filters={filters} onApplyFilters={applyFilters} onResetFilters={resetFilters} /> setSelectedUser(null)} />
); }