import React, { useState, useEffect } from 'react'; import { Search, Bell, MapPin, Building2, Calendar, Filter, Phone, Briefcase, CheckCircle, User, Gavel, LogOut, Clock, MessageSquare, Star, Image as ImageIcon, Check, Edit3, ShieldCheck, Zap, Award, Video, ListTodo, CheckSquare, UploadCloud, Settings, ChevronRight, PlusCircle, Facebook, Instagram, Globe, Send, Car, Wrench, FileText, ChevronLeft, Trash2, Camera, Hash, TrendingUp, HardHat } from 'lucide-react'; // ========================================== // 1. ثوابت النظام وقوائم الخيارات والكلمات الدلالية // ========================================== const GOVERNORATES = ["عمان", "إربد", "الزرقاء", "البلقاء", "المفرق", "الكرك", "الطفيلة", "معان", "العقبة", "جرش", "عجلون", "مادبا"]; const MAIN_CATEGORIES = ["إنشاءات", "تشطيبات وديكور", "كهروميكانيك", "صيانة عامة", "نقل ولوجستيات"]; const EXP_LEVELS = ["أقل من 5 سنوات", "5-10 سنوات", "أكثر من 10 سنوات"]; const REG_TYPES = ["صنايعي (فرد)", "مكتب مقاولات أو شركة"]; const PRICING_MODELS = ["كلاهما", "يومية فقط", "مقاولة فقط"]; // الكلمات الدلالية (SEO) لمحركات البحث const SEO_KEYWORDS = [ "مقاولات الأردن", "صنايعي عمان", "تشطيبات شقق", "كهربائي منازل", "مواسرجي إربد", "عطاءات الأردن", "ديكورات وجبس بورد", "صيانة عامة", "نقل عفش عمان", "سوق العمل الحر الأردني", "مطلوب معلم بليط", "مقاول حفر" ]; // ========================================== // 2. مولد البيانات الذكي // ========================================== const generateMockData = () => { const firstNames = ["أحمد", "محمد", "محمود", "عمر", "علي", "خالد", "يوسف", "طارق", "رائد", "عبدالله", "سعد", "سالم", "فادي", "رامي"]; const families = ["الخصاونة", "المصري", "الزعبي", "العبادي", "الحداد", "النجار", "الخطيب", "أبو رمان", "المجالي", "العتوم", "الطراونة", "بني هاني"]; const shopPrefixes = ["مؤسسة", "شركة", "مكتب", "أعمال", "مجموعة"]; const specialties = { "إنشاءات": ["حفر وتأسيس", "عظم وطوبار", "حداد مسلح"], "تشطيبات وديكور": ["بليط", "دهين", "جبس بورد", "نجار ديكور", "ألمنيوم"], "كهروميكانيك": ["كهربائي منازل", "مواسرجي", "فني تكييف", "تدفئة مركزية"], "صيانة عامة": ["صيانة أجهزة منزلية", "عزل أسطح", "تنظيف خزانات"] }; const areas = ["طبربور", "خلدا", "الحي الجنوبي", "الزرقاء الجديدة", "صويلح", "الدوار السابع", "المدينة الرياضية", "ماركا", "شفا بدران", "الحصن"]; const generatedContractors = []; const generatedTenders = []; for(let i=0; i<30; i++) { const mainCat = MAIN_CATEGORIES[Math.floor(Math.random() * MAIN_CATEGORIES.length)]; const subs = specialties[mainCat] || ["عام"]; const sub = subs[Math.floor(Math.random() * subs.length)]; const fName = firstNames[Math.floor(Math.random() * firstNames.length)]; const lName = families[Math.floor(Math.random() * families.length)]; const gov = GOVERNORATES[Math.floor(Math.random() * GOVERNORATES.length)]; const isCompany = Math.random() > 0.7; const shopName = isCompany ? `${shopPrefixes[Math.floor(Math.random() * shopPrefixes.length)]} ${fName} لـ ${mainCat}` : `المعلم ${fName} ${lName} - ${sub}`; generatedContractors.push({ id: 1000 + i, fullName: `${fName} ${lName}`, shopName: shopName, role: "contractor", regType: isCompany ? REG_TYPES[1] : REG_TYPES[0], mainCategory: mainCat, subSpecialty: sub, experience: EXP_LEVELS[Math.floor(Math.random() * EXP_LEVELS.length)], governorate: gov, coveredAreas: "حسب الاتفاق", phone: `07${Math.floor(Math.random() * 90000000 + 10000000)}`, extraPhone: "", about: `نقدم أفضل خدمات الـ ${sub} في ${gov}. دقة في المواعيد وجودة في العمل وأسعار منافسة تناسب الجميع.`, hasTransport: Math.random() > 0.2 ? "نعم" : "لا", pricingModel: PRICING_MODELS[Math.floor(Math.random() * PRICING_MODELS.length)], rating: (Math.random() * (5 - 3.5) + 3.5).toFixed(1), isAvailable: Math.random() > 0.3, isVerified: Math.random() > 0.5, badges: Math.random() > 0.6 ? ['fast_response'] : [], stats: { totalRequests: Math.floor(Math.random() * 50), completedJobs: Math.floor(Math.random() * 40), profileViews: Math.floor(Math.random() * 200) }, portfolio: Math.random() > 0.3 ? [{ id: 1, title: `أعمال ${sub}`, before: "https://picsum.photos/400/300?random="+i, after: "https://picsum.photos/400/300?random="+(i+100) }] : [], requests: [] }); } for(let i=0; i<40; i++) { const mainCat = MAIN_CATEGORIES[Math.floor(Math.random() * MAIN_CATEGORIES.length)]; const subs = specialties[mainCat] || ["عام"]; const sub = subs[Math.floor(Math.random() * subs.length)]; const gov = GOVERNORATES[Math.floor(Math.random() * GOVERNORATES.length)]; const area = areas[Math.floor(Math.random() * areas.length)]; generatedTenders.push({ id: 5000 + i, title: `مطلوب ${sub} للعمل في ${area}`, clientName: `${firstNames[Math.floor(Math.random() * firstNames.length)]} ${families[Math.floor(Math.random() * families.length)]}`, location: `${gov} - ${area}`, category: mainCat, postDate: `2026-04-${Math.floor(Math.random() * 20 + 1).toString().padStart(2, '0')}`, status: "مفتوح", description: `نبحث عن ${sub} ذو خبرة للقيام بأعمال عاجلة في الموقع. يرجى من المهتمين تقديم عروضهم مع ذكر التكلفة التقريبية.`, bidsCount: Math.floor(Math.random() * 5) }); } return { contractors: generatedContractors, tenders: generatedTenders.sort((a,b) => b.id - a.id) }; }; // ========================================== // 3. التطبيق الرئيسي // ========================================== export default function App() { const [currentView, setCurrentView] = useState('home'); const [tenders, setTenders] = useState([]); const [contractors, setContractors] = useState([]); const [currentUser, setCurrentUser] = useState(null); const [selectedContractor, setSelectedContractor] = useState(null); useEffect(() => { const data = generateMockData(); setTenders(data.tenders); setContractors(data.contractors); }, []); useEffect(() => { window.scrollTo({ top: 0, behavior: 'smooth' }); }, [currentView]); const navigateTo = (view, data = null) => { if (view === 'public_profile' && data) setSelectedContractor(data); setCurrentView(view); }; const handleLogout = () => { setCurrentUser(null); navigateTo('home'); }; // --- مكون الأزرار المودرن (Bento Style) --- const ModernButton = ({ children, onClick, variant = 'primary', className = '', type = 'button' }) => { const baseStyle = "font-bold py-3.5 px-6 rounded-2xl transition-all duration-300 transform active:scale-95 flex items-center justify-center gap-2 outline-none"; const variants = { primary: "bg-slate-900 hover:bg-slate-800 text-white shadow-xl shadow-slate-900/20", secondary: "bg-white text-slate-900 hover:bg-slate-50 shadow-lg shadow-slate-200/50", accent: "bg-purple-600 hover:bg-purple-700 text-white shadow-xl shadow-purple-600/30", success: "bg-emerald-500 hover:bg-emerald-600 text-white shadow-xl shadow-emerald-500/30", outline: "bg-transparent border-2 border-slate-200 hover:border-slate-300 text-slate-700" }; return ( ); }; // ========================================== // الهيدر العام للمنصة (Bento Style) // ========================================== const GlobalHeader = () => (
navigateTo('home')}>

صنايعي.جو

{currentUser ? ( <> {currentUser.role === 'client' && ( navigateTo('post_job')} variant="accent" className="hidden md:flex !py-2.5 !px-4 text-sm"> اطرح مشروع )} {currentUser.role === 'contractor' && ( navigateTo('dashboard')} variant="primary" className="hidden md:flex !py-2.5 !px-4 text-sm"> لوحة التحكم )} ) : ( navigateTo('auth')} variant="primary" className="!py-2.5 !px-6 text-sm"> دخول / تسجيل )}
); // ========================================== // الصفحة الرئيسية (Bento Grid Style) // ========================================== const MarketplaceHomeView = () => (
{/* --- Hero Section (Bento Grid) --- */}
{/* Main Hero Card (Spans 2 columns, 2 rows) */}
منصة الأردن الأولى للمهن

أنجز أعمالك مع أفضل الصنايعية في المملكة.

سواء كنت تبحث عن صيانة سريعة، تشطيب كامل، أو مبرمج لمشروعك، نحن نربطك بالكفاءات الموثوقة.

{currentUser?.role === 'client' ? ( navigateTo('post_job')} variant="accent">اطرح مشروعك الآن ) : ( navigateTo('auth')} variant="accent">سجل مجاناً وابدأ )}
{/* Directory Access Card */}
navigateTo('directory')}>

تصفح دليل المهنيين

ابحث عن مقاولين موثوقين حسب محافظتك وتخصصهم الدقيق.

{/* Stats Card 1 */}
+{contractors.length}
مهني ومقاول مسجل
{/* Stats Card 2 */}
+{tenders.length}
عطاء ومشروع متاح
{/* --- Tenders List (Bento Style) --- */}

أحدث المشاريع (العطاءات)

{tenders.slice(0, 9).map(tender => (
{tender.category} {tender.postDate}

{tender.title}

{tender.description}

{tender.location}
{tender.bidsCount} عروض
))}
{/* --- SEO Keywords Section (Bento Style Footer Module) --- */}

تخصصات وكلمات شائعة

{SEO_KEYWORDS.map((keyword, index) => ( {keyword} ))}
); // ========================================== // دليل المهنيين (Bento Style) // ========================================== const DirectoryView = () => { const [searchGov, setSearchGov] = useState("الكل"); const [searchCat, setSearchCat] = useState("الكل"); const filteredContractors = contractors .filter(c => searchCat === "الكل" || c.mainCategory === searchCat) .filter(c => searchGov === "الكل" || c.governorate === searchGov) .sort((a, b) => (a.isAvailable === b.isAvailable) ? 0 : a.isAvailable ? -1 : 1); return (

دليل الصنايعية

تصفح ملفات المهنيين الموثقين وتواصل معهم مباشرة.

{filteredContractors.slice(0, 30).map(contractor => (
{contractor.portfolio.length > 0 ? ( عمل ) :
} {contractor.isAvailable && (
متاح
)}
{contractor.subSpecialty}
{contractor.rating}

{contractor.shopName} {contractor.isVerified && }

{contractor.governorate}

{contractor.about}

navigateTo('public_profile', contractor)} variant="outline" className="w-full text-sm !rounded-xl border-slate-200 bg-slate-50 hover:bg-slate-100 hover:border-slate-300"> عرض الملف الكامل
))}
); }; // ========================================== // التسجيل والدخول (Bento Modal Style) // ========================================== const AuthView = () => { const [step, setStep] = useState(1); const [role, setRole] = useState('contractor'); const [formData, setFormData] = useState({ fullName: '', phone: '', shopName: '', regType: REG_TYPES[0], mainCategory: MAIN_CATEGORIES[1], subSpecialty: '', experience: EXP_LEVELS[1], governorate: GOVERNORATES[0], coveredAreas: '' }); const handleChange = (e) => setFormData({...formData, [e.target.name]: e.target.value}); const handleNext = (e) => { e.preventDefault(); if(role === 'client') { setCurrentUser({ id: Date.now(), name: formData.fullName, phone: formData.phone, role }); navigateTo('home'); } else { setStep(2); } }; const handleFinish = (e) => { e.preventDefault(); const newContractor = { id: Date.now(), fullName: formData.fullName, shopName: formData.shopName || `المعلم ${formData.fullName}`, phone: formData.phone, extraPhone: "", role: "contractor", regType: formData.regType, mainCategory: formData.mainCategory, subSpecialty: formData.subSpecialty, experience: formData.experience, governorate: formData.governorate, coveredAreas: formData.coveredAreas, about: "حساب جديد. يرجى تعديل النبذة لتجذب الزبائن.", hasTransport: "نعم", pricingModel: PRICING_MODELS[0], rating: "5.0", isAvailable: true, isVerified: false, badges: [], stats: { totalRequests: 0, completedJobs: 0, profileViews: 0 }, portfolio: [], requests: [] }; setContractors([newContractor, ...contractors]); setCurrentUser(newContractor); navigateTo('dashboard'); }; return (

{step === 1 ? 'مرحباً بك في صنايعي.جو' : 'أكمل ملفك المهني'}

{step === 1 ? 'سجل مجاناً وابدأ بإنجاز أعمالك أو زيادة دخلك' : 'بياناتك المهنية تهم الزبائن'}

{step === 1 && (
{role === 'client' ? 'دخول للمنصة' : 'التالي'}
)} {step === 2 && (
setStep(1)} className="px-4 !rounded-xl"> حفظ ودخول للوحة التحكم
)}
); }; // ========================================== // لوحة تحكم المهني (Bento Dashboard) // ========================================== const ContractorDashboardView = () => { const currentContractorData = contractors.find(c => c.id === currentUser.id); const [activeTab, setActiveTab] = useState('overview'); const [formData, setFormData] = useState(currentContractorData); const [biddingTender, setBiddingTender] = useState(null); const [bidForm, setBidForm] = useState({ price: '', time: '', note: '' }); if (!currentContractorData) return
جاري التحميل...
; const updateGlobalContractorState = (updatedData) => { const newContractors = contractors.map(c => c.id === updatedData.id ? updatedData : c); setContractors(newContractors); setCurrentUser(updatedData); setFormData(updatedData); }; const toggleAvailability = () => updateGlobalContractorState({ ...currentContractorData, isAvailable: !currentContractorData.isAvailable }); const handleSaveSettings = (e) => { e.preventDefault(); updateGlobalContractorState(formData); alert('تم حفظ البيانات بنجاح في ملفك!'); }; const handleAddPortfolioImage = () => { const newId = Date.now(); const newImg = `https://picsum.photos/400/300?random=${newId}`; const updatedPortfolio = [...formData.portfolio, { id: newId, title: `عمل ${formData.portfolio.length + 1}`, before: newImg, after: newImg }]; setFormData({...formData, portfolio: updatedPortfolio}); }; const handleRemovePortfolioImage = (idToRemove) => { const updatedPortfolio = formData.portfolio.filter(item => item.id !== idToRemove); setFormData({...formData, portfolio: updatedPortfolio}); }; const handleOpenBid = (tender) => { setBiddingTender(tender); setBidForm({ price: '', time: '', note: '' }); }; const handleBidSubmit = (e) => { e.preventDefault(); const updatedTenders = tenders.map(t => t.id === biddingTender.id ? { ...t, bidsCount: t.bidsCount + 1 } : t); setTenders(updatedTenders); alert('تم إرسال عرض السعر للزبون.'); setBiddingTender(null); }; return (
{/* Sidebar (Bento Style Floating) */} {/* Dashboard Main Content */}
{/* --- Overview (Bento Grid) --- */} {activeTab === 'overview' && (
{/* Welcome Card (Spans 2 columns) */}

أهلاً بك، {currentContractorData.fullName.split(' ')[0]}

تابع أعمالك واحرص على تحديث صور مشاريعك لزيادة طلباتك.

الظهور في الدليل
{/* Rating Card */}
{currentContractorData.rating}
تقييم الزبائن
{/* Stats Grid Mini Bento */}
{[ { label: "طلبات واصلة", value: currentContractorData.requests.length, color: "text-slate-900" }, { label: "أعمال منجزة", value: currentContractorData.stats.completedJobs, color: "text-emerald-600" }, { label: "زيارات لملفك", value: currentContractorData.stats.profileViews, color: "text-purple-600" } ].map((stat, idx) => (
{stat.value}
{stat.label}
))}
)} {/* --- Market (Bento Cards) --- */} {activeTab === 'market' && (

سوق المشاريع

قدم أسعارك على طلبات الزبائن لزيادة فرصة حصولك على عمل.

{tenders.slice(0, 10).map(tender => (
{tender.category} {tender.location}

{tender.title}

{tender.description}

handleOpenBid(tender)} variant="dark" className="w-full text-sm !rounded-xl !py-2.5"> قدم عرض سعر
))}
)} {/* --- Settings & Portfolio (Bento Forms) --- */} {activeTab === 'settings' && (
{/* Portfolio Section */}

صور أعمالك (قبل وبعد)

إضافة صورة
{formData.portfolio.length === 0 ? (

لا توجد صور

أضف صور أعمالك لجذب المزيد من الزبائن.

) : (
{formData.portfolio.map((item, index) => (
عمل
{ const newPort = [...formData.portfolio]; newPort[index].title = e.target.value; setFormData({...formData, portfolio: newPort}); }} className="w-full bg-white border border-slate-200 rounded-xl px-3 py-2 text-sm font-bold text-slate-700 outline-none focus:border-slate-900" placeholder="وصف الصورة" />
))}
)}
{/* Profile Form Section */}

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

setFormData({...formData, shopName: e.target.value})} className="w-full bg-slate-50 border-2 border-slate-100 rounded-2xl py-3 px-4 outline-none focus:border-slate-900 font-bold text-slate-800" />
setFormData({...formData, subSpecialty: e.target.value})} className="w-full bg-slate-50 border-2 border-slate-100 rounded-2xl py-3 px-4 outline-none focus:border-slate-900 font-bold text-slate-800" />
حفظ ونشر التعديلات
)} {/* --- Modal (Bento Style) --- */} {biddingTender && (

تقديم عرض سعر

على مشروع: {biddingTender.title}

setBidForm({...bidForm, price: e.target.value})} className="w-full bg-slate-50 border-2 border-slate-100 rounded-2xl py-3 px-4 outline-none focus:border-slate-900 font-bold" placeholder="0" />
setBidForm({...bidForm, time: e.target.value})} className="w-full bg-slate-50 border-2 border-slate-100 rounded-2xl py-3 px-4 outline-none focus:border-slate-900 font-bold" placeholder="0" />
setBiddingTender(null)} className="flex-1 !rounded-2xl">إلغاء تأكيد
)}
{/* Mobile Bottom Nav */}
); }; return (
{currentView !== 'dashboard' && }
{currentView === 'home' && } {currentView === 'directory' && } {currentView === 'auth' && } {currentView === 'dashboard' && } {currentView === 'post_job' && (

نموذج طرح المشاريع للزبائن

)}
); }