// Services & Pricing page — 4-tab structure // Tabs: Individual (Pay-as-you-go) · Business · Enterprise · White Label // Below tabs: Data sources, Legal callout, FAQ const Pricing = ({ t, lang, setPage, setPreselectedServices }) => { const [tab, setTab] = React.useState("individual"); const [openFaq, setOpenFaq] = React.useState(0); const [picks, setPicks] = React.useState([]); return (
{t.pricing.eyebrow}

{t.pricing.h1}

{t.pricing.sub}

{/* Beta-trust badge */}
🚀
{lang === "ar" ? "إصدار تجريبي · أول 1,000 عميل" : "Beta launch · first 1,000 customers"}
{lang === "ar" ? "خصم إضافي 20% على أول 3 تقارير · وصول مبكر للميزات الجديدة · تأثير مباشر على تطوير المنصة" : "Extra 20% off your first 3 reports · early access to new features · direct influence on the product"}
{/* Tab toggle */}
{[ { k: "individual", l: t.pricing.tabs.individual }, { k: "business", l: t.pricing.tabs.business }, { k: "enterprise", l: t.pricing.tabs.enterprise }, { k: "whitelabel", l: t.pricing.tabs.whitelabel }, ].map(x => ( ))}
{/* Tab content */}
{t.pricing.tab_eyebrow[tab]}

{t.pricing.tab_h[tab]}

{t.pricing.tab_sub[tab]}

{tab === "individual" && } {tab === "business" && } {tab === "enterprise" && } {tab === "whitelabel" && }
{/* Data sources (transparency) */}
{lang === "ar" ? "مصادر البيانات" : "Data sources"}

{lang === "ar" ? "شفافية كاملة. مصادر مفتوحة." : "Full transparency. Open public sources."}

{lang === "ar" ? "كل تقرير يستند إلى البيانات الحكومية المفتوحة. دؤوب جهة مستقلة لا تُمثّل مراجعة رسمية من أي جهة، ولا تستخدم بيانات سرية." : "Every report draws on public open-data sources. Daoob is an independent provider — reports are not an official review by any government entity, and no confidential data is used."}

{[ { icon: "📊", t: lang === "ar" ? "منصة سهيل" : "Suhail platform", d: lang === "ar" ? "بيانات قطع الأراضي، الصفقات الموثقة، مؤشرات الأسعار" : "Parcel data, recorded transactions, price indices" }, { icon: "🏛", t: lang === "ar" ? "منصة بلدي" : "Balady platform", d: lang === "ar" ? "الاشتراطات التنظيمية، رخص البناء العامة، تصنيف الاستخدامات" : "Building regulations, public permits, land-use classifications" }, { icon: "🏗", t: lang === "ar" ? "الهيئة الملكية للرياض" : "Royal Commission for Riyadh", d: lang === "ar" ? "اشتراطات الأبراج، كود وادي حنيفة، مناطق التطوير الخاصة" : "High-rise standards, Wadi Hanifa code, special development zones" }, { icon: "📋", t: lang === "ar" ? "الهيئة العامة للعقار" : "General Real-Estate Authority", d: lang === "ar" ? "مؤشرات الإيجارات، الفهرس العقاري الوطني" : "Rent indices, National Real-Estate Index" }, { icon: "🗺", t: lang === "ar" ? "العنوان الوطني" : "National Address", d: lang === "ar" ? "الإحداثيات الجغرافية الدقيقة" : "Precise geographic coordinates" }, { icon: "⚖️", t: lang === "ar" ? "وزارة الشؤون البلدية" : "Ministry of Municipal Affairs", d: lang === "ar" ? "اللوائح والاشتراطات المنشورة" : "Published regulations and standards" }, ].map((src, i) => (
{src.icon}
{src.t}
{src.d}
))}
{/* Legal callout */}
{lang === "ar" ? "ملاحظة قانونية مهمة" : "Important legal notice"}

{lang === "ar" ? "تقارير دؤوب — بما فيها تقدير قيمة الأرض — هي تقارير استرشادية مبنية على بيانات مفتوحة وذكاء اصطناعي. لا تُعد بديلاً عن التقييم العقاري الرسمي الصادر من مقيّم معتمد لدى الهيئة السعودية للمقيّمين المعتمدين (تقييم). للتقييم المطلوب للبنوك والمحاكم، يُرجى التعاقد مع مقيّم معتمد. القرار الاستثماري النهائي يبقى مسؤولية المستثمر." : "Daoob reports — including indicative land valuations — are advisory products built on open data and AI. They are not a substitute for an official real-estate appraisal issued by a valuer certified by the Saudi Authority for Accredited Valuers (Taqeem). For valuations required by banks or courts, please engage a certified valuer. The final investment decision remains the investor's responsibility."}

{lang === "ar" ? "🚀 دؤوب في مرحلة الحصول على رخصة المقيّم العقاري — تابعونا للتطورات." : "🚀 Daoob is in the process of obtaining a real-estate valuer licence — stay tuned for updates."}

{/* FAQ */}
{t.pricing.faq_h}

{lang === "ar" ? "أسئلة العملاء الشائعة." : "What clients ask us."}

{t.pricing.faqs.map((f, i) => (
setOpenFaq(openFaq === i ? -1 : i)}>
{f.q}
{f.a}
))}
); }; Object.assign(window, { Pricing }); // ============================ INDIVIDUAL TAB ============================ const IndividualTab = ({ t, lang, picks, setPicks, setPage, setPreselectedServices }) => { const onPick = (idx) => { setPreselectedServices([]); setPage("request"); }; return ( <> {/* Fixed bundles */}
{t.pricing.individual_bundles.map((b, i) => (
{b.featured && {lang === "ar" ? "الأكثر اختياراً" : "Most popular"}}
{b.name}
{b.tagline}
{b.price} {b.currency}
{b.quota}
))}
{/* 16-study showcase — static, non-selectable */}
{lang === "ar" ? "ما يشمله كل تقرير" : "What every report covers"}

{lang === "ar" ? "الدراسات الستّ عشرة." : "The 16 studies."}

{lang === "ar" ? "كل تقرير يُعدّ على قالب دؤوب المعتمد، يُولّده وكلاء ذكاء متخصصون، ويُسلَّم خلال دقائق بصيغة PDF ثنائية اللغة." : "Every report is produced on Daoob's certified template, generated by specialized AI agents, and delivered within minutes as a bilingual PDF."}

{t.services.list.map((s, i) => (
{String(i + 1).padStart(2, "0")}
{s.t}
{s.d}
{s.indicative && (
{lang === "ar" ? "استرشادي" : "Indicative"}
)}
))}
); }; // ============================ Package builder (used inside Individual tab) ============================ const PackageBuilder = ({ t, lang, picks, setPicks, setPage, setPreselectedServices }) => { const toggle = (i) => setPicks(p => p.includes(i) ? p.filter(x => x !== i) : [...p, i]); const selectAll = () => setPicks(t.services.list.map((_, i) => i)); const clearAll = () => setPicks([]); const unitPriceForCount = (n) => { if (n >= 16) return 250; if (n >= 13) return 280; if (n >= 10) return 300; if (n >= 7) return 350; if (n >= 4) return 400; if (n >= 2) return 450; return 500; }; const discountPctForCount = (n) => Math.round((1 - unitPriceForCount(n) / 500) * 100); const cur = lang === "ar" ? "ر.س" : "SAR"; const unit = unitPriceForCount(picks.length); const total = picks.length * unit; const officeTotal = picks.reduce((acc, i) => { const m = t.services.list[i].price.match(/[\d,]+/); return acc + (m ? parseInt(m[0].replace(/,/g, ""), 10) : 0); }, 0); const officeSavings = officeTotal - total; const showUpsell = picks.length >= 8 && picks.length < 16; const upgradeBonus = (16 * 250) - total; const discountTiers = [ { n: 1, u: 500, pct: 0 }, { n: 2, u: 450, pct: 10 }, { n: 4, u: 400, pct: 20 }, { n: 7, u: 350, pct: 30 }, { n: 10, u: 300, pct: 40 }, { n: 13, u: 280, pct: 44 }, { n: 16, u: 250, pct: 50 }, ]; const activeTierIdx = discountTiers.findIndex((tier, i) => { const next = discountTiers[i + 1]; return picks.length >= tier.n && (!next || picks.length < next.n); }); const goToCheckout = () => { if (picks.length === 0) return; setPreselectedServices(picks); setPage("request"); }; return ( <>
{lang === "ar" ? "السعر يقل كلما أضفت دراسات" : "The more studies you add, the lower the price"}
{discountTiers.map((tier, i) => (
= tier.n ? " passed" : "")}>
{tier.n === 16 ? (lang === "ar" ? "الكل" : "All") : tier.n}+
{tier.u} {cur}
{tier.pct > 0 &&
−{tier.pct}%
}
))}

{t.pricing.onetime_pick} · {t.services.list.length} {lang === "ar" ? "دراسة" : "studies"}

{t.services.list.map((s, i) => { const on = picks.includes(i); return ( ); })}
); }; // ============================ BUSINESS TAB ============================ const BusinessTab = ({ t, lang, setPage }) => (
{t.pricing.business_tiers.map((tier, i) => (
{tier.featured && {lang === "ar" ? "الأكثر اختياراً" : "Most chosen"}}
{tier.name}
{tier.tagline}
{tier.quota}
{tier.price} {tier.currency} {tier.per}
{tier.annual_note}
{tier.desc}
))}
); // ============================ ENTERPRISE TAB ============================ const EnterpriseTab = ({ t, lang, setPage }) => (
{t.pricing.enterprise_tiers.map((tier, i) => (
{tier.featured && {lang === "ar" ? "الأكثر اختياراً" : "Most chosen"}}
{tier.name}
{tier.tagline}
{tier.quota}
{lang === "ar" ? "إعداد" : "Setup"}{tier.setup} {lang === "ar" ? "ر.س" : "SAR"}
{lang === "ar" ? "سنوياً" : "Annual"}{tier.annual} {lang === "ar" ? "ر.س" : "SAR"}
))}
); // ============================ WHITE LABEL TAB ============================ const WhiteLabelTab = ({ t, lang, setPage }) => (
{t.pricing.whitelabel_tiers.map((tier, i) => (
{tier.featured && {lang === "ar" ? "الأكثر اختياراً" : "Most chosen"}}
{tier.name}
{tier.tagline}
{tier.quota}
{lang === "ar" ? "إعداد" : "Setup"}{tier.setup} {lang === "ar" ? "ر.س" : "SAR"}
{lang === "ar" ? "سنوياً" : "Annual"}{tier.annual} {lang === "ar" ? "ر.س" : "SAR"}
))}
);