"use client"; import { useState, useEffect } from "react"; import { motion, AnimatePresence } from "framer-motion"; import { useRouter } from "next/navigation"; import Link from "next/link"; import { PlusCircle, Building, Home, DollarSign, MapPin, Bed, Bath, Square, Edit, Trash2, Eye, Calendar, TrendingUp, Users, FileText, Image as ImageIcon, CheckCircle, XCircle, AlertCircle, ChevronRight, ChevronLeft, Loader2, Clock, Wifi, Zap, Flame, Droplets, Cigarette, Dog, Music, Warehouse, Layers, Sofa, DoorOpen, Wind, Pencil, Save, X, Star, Ban, Check, School, Hospital, Store, GraduationCap, TreePine, } from "lucide-react"; import toast, { Toaster } from "react-hot-toast"; import AuthService from "../../services/AuthService"; import { getMyRentListings, getMySaleListings, editRentProperty, editSaleProperty, updateRentPropertyStatus, updateSalePropertyStatus, } from "../../utils/api"; const DeleteConfirmationModal = ({ isOpen, onClose, onConfirm, propertyTitle, }) => { if (!isOpen) return null; return ( e.stopPropagation()} >

تأكيد الحذف

هل أنت متأكد من حذف العقار:{" "} "{propertyTitle}"؟

هذا الإجراء لا يمكن التراجع عنه

); }; const DeactivateConfirmationModal = ({ isOpen, onClose, onConfirm, propertyTitle, isActivating, }) => { if (!isOpen) return null; return ( e.stopPropagation()} >

{isActivating ? "تأكيد التنشيط" : "تأكيد إلغاء التنشيط"}

العقار:{" "} "{propertyTitle}"

{!isActivating ? (

⚠️ تحذير

إذا قمت بإلغاء التنشيط، سيصبح هذا العقار غير متاح للحجز أو الشراء. لا يمكن للعملاء رؤيته أو حجزه حتى تقوم بتنشيطه مرة أخرى.

) : (

✅ تنشيط العقار

سيصبح العقار متاحاً مرة أخرى للحجز أو الشراء.

)}
); }; const serviceLabels = { Electricity: "كهرباء", Internet: "إنترنت", Heating: "تدفئة", Water: "ماء", Pool: "مسبح", PrivateGarden: "حديقة خاصة", Parking: "موقف سيارات", Security247: "حراسة 24 س", CentralHeating: "تدفئة مركزية", CentralAirConditioning: "تكييف مركزي", EquippedKitchen: "مطبخ مجهز", MaidsRoom: "غرفة خادمة", Elevator: "مصعد", Gym: "نادي رياضي", Sauna: "ساونا", Jacuzzi: "جاكوزي", Balcony: "بلكونة", Rooftop: "سطح", Furnished: "مفروش", AirConditioning: "تكييف", SatelliteTV: "تلفاز", Fireplace: "مدفأة", StudyRoom: "غرفة دراسة", Storage: "مستودع", Laundry: "غرفة غسيل", SmartHome: "منزل ذكي", }; const termLabels = { NoSmoking: "ممنوع التدخين", NoAnimals: "ممنوع الحيوانات الأليفة", NoParties: "ممنوع الحفلات", NoAlcohol: "ممنوع الكحول", SuitableForChildren: "مناسب للأطفال", SuitableForFamilies: "مناسب للعائلات", SuitableForStudents: "مناسب للطلاب", SuitableForElderly: "مناسب لكبار السن", OnlyFemales: "إناث فقط", OnlyMales: "ذكور فقط", }; const proximityLabels = { School: "مدرسة", Hospital: "مستشفى", Restaurant: "مطعم", University: "جامعة", Park: "حديقة", Mall: "مركز تسوق", Supermarket: "سوبر ماركت", Pharmacy: "صيدلية", Mosque: "مسجد", Bank: "بنك", Airport: "مطار", BusStation: "موقف باص", }; const PropertyViewModal = ({ isOpen, onClose, property }) => { if (!isOpen || !property) return null; return ( e.stopPropagation()} >

{property.title}

تم الإضافة:{" "} {new Date(property.createdAt).toLocaleDateString("ar-SA")}

{property.images && property.images.length > 0 && (

صور العقار

{property.images.map((image, index) => (
{`${property.title}
))}
)}

معلومات أساسية

نوع العقار: {property.propertyTypeLabel || "عقار"}

نوع العرض: {property.displayType === "Daily rent" ? "إيجار يومي" : property.displayType === "Monthly rent" ? "إيجار شهري" : property.displayType === "Both" ? "يومي وشهري" : property.displayType === "For sale" ? "للبيع" : property.rentType === "daily" ? "إيجار يومي" : property.rentType === "monthly" ? "إيجار شهري" : (property.dailyPrice > 0 && property.monthlyPrice > 0) ? "يومي وشهري" : property.monthlyPrice > 0 ? "إيجار شهري" : property.dailyPrice > 0 ? "إيجار يومي" : property.purpose === "sale" ? "للبيع" : "عرض"}

{property.purpose === "rent" && (

حالة التأثيث: {property.furnished ? "مفروش" : "غير مفروش"}

)}

حالة العقار: {property.status === "available" ? "متاح" : "مؤجر"}

{property.description && (

الوصف: {property.description}

)}

التفاصيل

{property.bedrooms} غرف
{property.bathrooms} حمامات
{property.area} م²
{property.floor > 0 && (
{property.floor} طابق
)} {property.salons > 0 && (
{property.salons} صالونات
)} {property.balconies > 0 && (
{property.balconies} بلكونات
)} {property.bookedCount > 0 && (
{property.bookedCount} حجوزات
)}

الموقع

{property.address || "لم يتم تحديد العنوان"} {property.city && `، ${property.city}`} {property.district && `، ${property.district}`}

{property.services && (Array.isArray(property.services) ? property.services.length > 0 : Object.keys(property.services).length > 0) && (

الخدمات المتوفرة

{Array.isArray(property.services) ? property.services.map((svc, i) => ( {serviceLabels[svc] || svc} )) : Object.entries(property.services).map(([key, value]) => { if (!value) return null; const detail = typeof value === "object" && value.detail ? value.detail : typeof value === "string" ? value : null; return ( {serviceLabels[key] || key} {detail && ( · {detail} )} ); })}
)} {property.proximity && Object.keys(property.proximity).length > 0 && (

القرب من الخدمات

{Object.entries(property.proximity).map(([key, val]) => { if (!val) return null; const dist = typeof val === "object" ? val.distance : val; return (
{key === "School" && } {key === "Hospital" && } {key === "Restaurant" && } {key === "University" && } {key === "Park" && } {key === "Mall" && } {!["School","Hospital","Restaurant","University","Park","Mall"].includes(key) && }
{proximityLabels[key] || key} {dist} {typeof dist === "number" ? "كم" : ""}
); })}
)} {property.terms && Object.keys(property.terms).length > 0 && (

شروط الاستخدام

{Object.entries(property.terms).map(([key, value]) => { if (!value) return null; return (
{key.startsWith("No") || key.startsWith("Only") ? ( ) : ( )} {termLabels[key] || key}
); })}
)}

معلومات السعر

{property.purpose === "rent" ? (
{property.dailyPrice > 0 && (

السعر اليومي: {Number(property.dailyPrice).toLocaleString()} ل.س

)} {property.monthlyPrice > 0 && (

السعر الشهري: {Number(property.monthlyPrice).toLocaleString()} ل.س

)} {property.deposit > 0 && (

التأمين: {Number(property.deposit).toLocaleString()} ل.س

)}

نوع الإيجار:{" "} {property.rentType === "daily" ? "يومي" : property.rentType === "monthly" ? "شهري" : "يومي وشهري"}

{property.rating > 0 && (

التقييم: {Number(property.rating).toFixed(1)}{" "}

)}
) : (

سعر البيع: {Number(property.salePrice).toLocaleString()} ل.س

)}
); }; const PropertyEditModal = ({ isOpen, onClose, property, onSave }) => { const [formData, setFormData] = useState({}); const [newCustomTerm, setNewCustomTerm] = useState(''); const [isSaving, setIsSaving] = useState(false); useEffect(() => { if (!property || !isOpen) return; const raw = property._raw || {}; const info = raw.propertyInformation || {}; let details = {}; try { details = typeof info.detailsJSON === 'object' && info.detailsJSON ? info.detailsJSON : JSON.parse(info.detailsJSON || '{}'); } catch { details = {}; } const propServices = property.services || {}; const services = {}; const serviceDetails = {}; Object.keys(serviceLabels).forEach((key) => { const val = propServices[key]; if (val && typeof val === 'string') { services[key] = true; serviceDetails[key] = val; } else if (val && typeof val === 'object' && val.detail) { services[key] = true; serviceDetails[key] = val.detail; } else { services[key] = !!val; serviceDetails[key] = details.serviceDetails?.[key] || ''; } }); const propTerms = property.terms || {}; const terms = {}; Object.keys(termLabels).forEach((key) => { terms[key] = !!propTerms[key]; }); const prox = property.proximity || details.nearbyDistances || {}; setFormData({ propertyType: property.propertyType || 'apartment', furnished: property.furnished ?? false, description: property.description || '', bedrooms: property.bedrooms || 0, bathrooms: property.bathrooms || 0, floor: property.floor ?? details.floorNumber ?? details.floor ?? 0, salons: property.salons ?? details.numberOfSalons ?? details.salons ?? 0, balconies: property.balconies ?? details.numberOfBalconies ?? details.balconies ?? 0, area: property.area || 0, services, serviceDetails, terms, customTerms: details.customTerms || [], nearbySchool: prox.School ?? prox.school ?? '', nearbyHospital: prox.Hospital ?? prox.hospital ?? '', nearbyRestaurant: prox.Restaurant ?? prox.restaurant ?? '', nearbyUniversity: prox.University ?? prox.university ?? '', nearbyPark: prox.Park ?? prox.park ?? '', nearbyMall: prox.Mall ?? prox.mall ?? '', purpose: property.purpose || 'rent', currencyId: property.currencyId || 1, ...(property.purpose === 'rent' ? { dailyPrice: property.dailyPrice || 0, monthlyPrice: property.monthlyPrice || 0, deposit: property.deposit || 0, rentType: property.rentType || 'monthly', allowedPaymentPeriod: property.allowedPaymentPeriod || details.allowedPaymentPeriod || '', } : { salePrice: property.salePrice || 0 }), }); setNewCustomTerm(''); }, [property, isOpen]); const handleChange = (field, value) => { setFormData((prev) => ({ ...prev, [field]: value })); }; const handleServiceToggle = (key, checked) => { setFormData((prev) => ({ ...prev, services: { ...prev.services, [key]: checked }, })); }; const handleServiceDetail = (key, value) => { setFormData((prev) => ({ ...prev, serviceDetails: { ...prev.serviceDetails, [key]: value }, })); }; const handleTermToggle = (key, checked) => { setFormData((prev) => ({ ...prev, terms: { ...prev.terms, [key]: checked }, })); }; const addCustomTerm = () => { const term = newCustomTerm.trim(); if (!term) return; setFormData((prev) => ({ ...prev, customTerms: [...(prev.customTerms || []), term], })); setNewCustomTerm(''); }; const removeCustomTerm = (index) => { setFormData((prev) => ({ ...prev, customTerms: prev.customTerms.filter((_, i) => i !== index), })); }; const handleSave = async () => { setIsSaving(true); try { await onSave(formData); } catch { setIsSaving(false); } }; if (!isOpen || !property) return null; return ( e.stopPropagation()} >

تعديل العقار

قم بتحديث معلومات العقار

{/* Basic Info */}

معلومات أساسية

{[ { value: true, label: 'مفروش' }, { value: false, label: 'غير مفروش' }, ].map((opt) => ( ))}