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 && (
)}
{step === 2 && (
)}
);
};
// ==========================================
// لوحة تحكم المهني (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' && (
)}
{/* --- Modal (Bento Style) --- */}
{biddingTender && (
تقديم عرض سعر
على مشروع: {biddingTender.title}
)}
{/* Mobile Bottom Nav */}
);
};
return (
{currentView !== 'dashboard' &&
}
{currentView === 'home' &&
}
{currentView === 'directory' &&
}
{currentView === 'auth' &&
}
{currentView === 'dashboard' &&
}
{currentView === 'post_job' && (
نموذج طرح المشاريع للزبائن
)}
);
}