import { useState, useEffect, useCallback } from 'react'; import { Search, Trash2, Heart, Image as ImageIcon, Eye, Clock, Activity, FileText, X, Dog, Cat, ShieldCheck } from 'lucide-react'; import { toast } from 'react-hot-toast'; import api, { BASE_DOMAIN } from '../services/api'; import Spinner from '../components/ui/Spinner'; import Pagination from '../components/ui/Pagination'; import ConfirmModal from '../components/ui/ConfirmModal'; export interface Pet { id: string; name: string; species?: string; type?: string; breed?: string; age?: number; weight?: number; activityLevel?: string; imageUrl?: string; avatarUrl?: string; user?: { firstName?: string; lastName?: string; name?: string; mobile?: string; email?: string; }; medicalConditions?: Array<{ condition: string }>; reminders?: Array<{ id: string; title: string; time: string; frequency: string; }>; healthLogs?: Array<{ id: string; appetite: string; energy: string; digestion: string; note?: string; loggedDate: string; createdAt: string; }>; prescriptions?: Array<{ id: string; status: string; notes?: string; adminNotes?: string; createdAt: string; }>; ownerName?: string; createdAt?: string; } export default function Pets() { const [pets, setPets] = useState([]); const [isLoading, setIsLoading] = useState(true); const [search, setSearch] = useState(''); const [page, setPage] = useState(1); const [totalPages, setTotalPages] = useState(1); const limit = 10; const [selectedPetForView, setSelectedPetForView] = useState(null); const [deleteTargetId, setDeleteTargetId] = useState(null); const fetchPets = useCallback(async () => { try { setIsLoading(true); const res = await api.get('/admin/pets', { params: { page, limit, search } }); if (res.data?.data) { setPets(res.data.data); setTotalPages(res.data.meta?.lastPage || 1); } } catch (err) { console.error(err); } finally { setIsLoading(false); } }, [page, search]); useEffect(() => { const timer = setTimeout(() => { fetchPets(); }, 500); return () => clearTimeout(timer); }, [fetchPets]); const confirmDelete = async () => { if (!deleteTargetId) return; try { await api.delete(`/admin/pets/${deleteTargetId}`); toast.success('پروفایل حیوان خانگی با موفقیت حذف شد'); fetchPets(); } catch (error) { console.error('Delete failed', error); toast.error('خطا در حذف پروفایل'); } finally { setDeleteTargetId(null); } }; return (

حیوانات خانگی کاربران (Pets)

مشاهده و پایش آنلاین سلامت، یادآورها، گزارش‌ها و نسخه‌های پزشکی پت‌ها

{ setSearch(e.target.value); setPage(1); }} className="w-full pl-4 pr-12 py-3 rounded-xl border border-gray-200 focus:border-purple-500 outline-none transition-all text-xs font-bold" />
{isLoading ? ( ) : pets.length === 0 ? ( ) : ( pets.map((pet) => ( )) )}
تصویر نام و نژاد صاحب حیوان مشخصات فیزیکی سوابق سلامت عملیات
هیچ حیوانی یافت نشد
{pet.imageUrl ? ( {pet.name} ) : (
{pet.type === 'گربه' ? : }
)}
{pet.name} {pet.type || 'سگ'}
{pet.breed || 'نژاد نامشخص'}
{pet.user?.firstName || ''} {pet.user?.lastName || ''}
{pet.user?.mobile || pet.user?.email || '-'}
{pet.age ? `${pet.age} ساله` : 'سن نامشخص'}، {pet.weight ? `${pet.weight} کیلوگرم` : 'وزن نامشخص'}
تحرک: {pet.activityLevel || 'متوسط'}
{pet.reminders?.length || 0} یادآور • {pet.healthLogs?.length || 0} گزارش {pet.prescriptions && pet.prescriptions.length > 0 && ( {pet.prescriptions.length} نسخه پزشکی ثبت شده )}
{!isLoading && totalPages > 1 && (
)}
{/* Pet Medical Dossier Details Modal */} {selectedPetForView && (
{selectedPetForView.type === 'گربه' ? : }

پرونده پزشکی و پایش سلامت: {selectedPetForView.name}

شناسه: {selectedPetForView.id}

{/* Pet Info Banner */}
{selectedPetForView.name} ({selectedPetForView.breed || selectedPetForView.type})
سرپرست: {selectedPetForView.user?.firstName} {selectedPetForView.user?.lastName} | همراه: {selectedPetForView.user?.mobile || '-'}
{selectedPetForView.age} سال | {selectedPetForView.weight} کیلوگرم | تحرک {selectedPetForView.activityLevel || 'متوسط'}
{/* Medical Conditions */}

سوابق و حساسیت‌های پزشکی (Medical Conditions)

{selectedPetForView.medicalConditions && selectedPetForView.medicalConditions.length > 0 ? (
{selectedPetForView.medicalConditions.map((mc, idx) => ( {mc.condition} ))}
) : (

مورد پزشکی خاصی ثبت نشده است.

)}
{/* Active Reminders */}

یادآورهای فعال (Reminders)

{selectedPetForView.reminders && selectedPetForView.reminders.length > 0 ? (
{selectedPetForView.reminders.map((rem) => (
{rem.title} ساعت {rem.time} ({rem.frequency})
))}
) : (

یادآوری فعالی ثبت نشده است.

)}
{/* Health Logs */}

آخرین گزارشات روزانه سلامت (Health Logs)

{selectedPetForView.healthLogs && selectedPetForView.healthLogs.length > 0 ? (
{selectedPetForView.healthLogs.map((log) => (
تاریخ: {new Date(log.loggedDate || log.createdAt).toLocaleDateString('fa-IR')} اشتها: {log.appetite} | انرژی: {log.energy} | گوارش: {log.digestion}
{log.note &&

{log.note}

}
))}
) : (

گزارش سلامتی ثبت نشده است.

)}
{/* Prescriptions */}

نسخه‌های پزشکی این همدم (Prescriptions)

{selectedPetForView.prescriptions && selectedPetForView.prescriptions.length > 0 ? (
{selectedPetForView.prescriptions.map((rx) => (
نسخه #{rx.id.slice(0, 8)} {rx.status}
{rx.notes &&

یادداشت کاربر: {rx.notes}

} {rx.adminNotes &&

دستور پزشک: {rx.adminNotes}

}
))}
) : (

نسخه‌ای برای این پت ثبت نشده است.

)}
)} setDeleteTargetId(null)} />
); }