'use client'; import { useState, useEffect, useCallback } from 'react'; import { motion, AnimatePresence } from 'framer-motion'; import { Home, Star, MapPin, Calendar, Clock, Check, X, Loader2, User, MessageCircle, ChevronDown, Image as ImageIcon, } from 'lucide-react'; import toast, { Toaster } from 'react-hot-toast'; import { getUserReservations } from '../utils/api'; import AuthService from '../services/AuthService'; import PropertyRatingForm from '../components/ratings/PropertyRatingForm'; const STATUS_MAP = ['pending', 'ownerConfirmed', 'depositPaid', 'depositConfirmed', 'completed', 'cancelled']; const STATUS_CONFIG = { pending: { label: 'قيد الانتظار', color: 'bg-yellow-100 text-yellow-800 border-yellow-300' }, ownerConfirmed: { label: 'مؤكد من المالك', color: 'bg-blue-100 text-blue-800 border-blue-300' }, depositPaid: { label: 'تم دفع السلفة', color: 'bg-orange-100 text-orange-800 border-orange-300' }, depositConfirmed: { label: 'مؤكد', color: 'bg-green-100 text-green-800 border-green-300' }, completed: { label: 'منتهي', color: 'bg-teal-100 text-teal-800 border-teal-300' }, cancelled: { label: 'ملغي', color: 'bg-red-100 text-red-800 border-red-300' }, }; const API_BASE = process.env.NEXT_PUBLIC_API_URL || 'https://45.93.137.91.nip.io/api'; function StatusBadge({ code }) { const key = STATUS_MAP[code] || 'pending'; const cfg = STATUS_CONFIG[key]; return ( {cfg.label} ); } function ReservationCard({ reservation: r, onRate }) { const isCompleted = STATUS_MAP[r.status] === 'completed'; const imgSrc = r.propertyImage || r._prop?.images?.[0] || (r.propertyInfo?.images?.[0]); const imageUrl = imgSrc ? `${API_BASE}${imgSrc}` : null; const address = r.propertyAddress || r._prop?.address || ''; const beds = r._prop?.numberOfBedRooms ?? r.numberOfBedRooms ?? 0; const baths = r._prop?.numberOfBathRooms ?? r.numberOfBathRooms ?? 0; return (
عقار #{r.propertyId || r.id}
{imageUrl ? (
) : (
)} {address && (
{address}
)} {(beds > 0 || baths > 0) && (
{beds > 0 && {beds} غرف} {baths > 0 && {baths} حمامات}
)}
من
{new Date(r.startDate).toLocaleDateString('ar')}
إلى
{new Date(r.endDate).toLocaleDateString('ar')}
{r.totalPrice?.toLocaleString() ?? '—'}
السعر الإجمالي
رقم الحجز: #{r.id}
{isCompleted && ( )}
); } export default function BookedPropertiesPage() { const [reservations, setReservations] = useState([]); const [loading, setLoading] = useState(true); const [ratingReservation, setRatingReservation] = useState(null); const [expandedId, setExpandedId] = useState(null); useEffect(() => { if (!AuthService.getToken()) { toast.error('يرجى تسجيل الدخول أولاً'); setLoading(false); return; } loadReservations(); }, []); const loadReservations = useCallback(async () => { try { const data = await getUserReservations(); setReservations(Array.isArray(data) ? data : []); } catch (err) { console.error(err); toast.error('فشل تحميل الحجوزات'); setReservations([]); } finally { setLoading(false); } }, []); if (loading) { return (
); } return (

العقارات المحجوزة

لديك {reservations.length} حجز

{reservations.length > 0 && ( )}
{reservations.length === 0 ? (

لا توجد حجوزات

لم تقم بحجز أي عقار حتى الآن

) : (
{reservations.map((r, i) => ( setRatingReservation(r)} /> ))}
)} {reservations.filter(r => STATUS_MAP[r.status] === 'completed').length > 0 && (

تقييم العقارات

يمكنك تقييم العقارات المنتهية حجزها لمساعدة المستأجرين الآخرين

)}
{ratingReservation && ( setRatingReservation(null)}> e.stopPropagation()}>
{ setRatingReservation(null); toast.success('تم إرسال التقييم بنجاح!'); }} onCancel={() => setRatingReservation(null)} />
)}
); }