// Duyuf marketing + browse website (desktop / responsive)
// Headless web entry to the marketplace — hero search, featured
// packages, top providers, how-it-works, become-a-provider CTA, footer.
function WebNav({ theme, lang, onLanguageChange, dark, onThemeChange }) {
const T = theme;
const rtl = isRTL(lang);
const ctx = useWeb();
const [menuOpen, setMenuOpen] = React.useState(false);
const [languageOpen, setLanguageOpen] = React.useState(false);
const [, refreshProvider] = React.useState(0);
React.useEffect(() => {
const update = () => refreshProvider((v) => v + 1);
window.addEventListener("duyuf-provider-updated", update);
return () => window.removeEventListener("duyuf-provider-updated", update);
}, []);
const isProvider = Boolean(localStorage.getItem("duyuf_provider_session"));
const isCustomer = Boolean(localStorage.getItem("duyuf_customer") || firebase.auth().currentUser);
const isAdminMode = String(ctx?.page || "").startsWith("admin-");
const isProviderPortal = String(ctx?.page || "").startsWith("provider-");
const storedProvider = (() => {
try {
return JSON.parse(localStorage.getItem("duyuf_provider") || "null");
} catch (_) {
return null;
}
})();
const isAdminProvider = Boolean(
storedProvider?.isAdmin || localStorage.getItem("duyuf_admin_session"),
);
const visitorItems = [
{ id: "home", ar: "الرئيسية", en: "Home" },
{ id: "umrah", ar: "العمرة", en: "Umrah" },
{ id: "hotels", ar: "الفنادق", en: "Hotels" },
{ id: "flights", ar: "الطيران", en: "Flights" },
{ id: "transport", ar: "المواصلات", en: "Transport" },
{ id: "contact", ar: "تواصل", en: "Contact" },
{ id: isCustomer?"customer-bookings":"customer-bookings", ar: isCustomer?"حجوزاتي":"تسجيل الدخول", en:isCustomer?"My bookings":"Sign in" },
...(isProvider?[{id:"provider-switch",ar:"الانتقال إلى وضع المزود",en:"Switch to provider"}]:[]),
...(isAdminProvider||localStorage.getItem("duyuf_admin_session")?[{id:"admin-switch",ar:"الانتقال إلى وضع الأدمن",en:"Switch to admin"}]:[]),
];
const providerItems = [
{ id: "provider-dashboard", ar: "لوحة التحكم", en: "Dashboard" },
{ id: "provider-dashboard", ar: "إدارة الباقات", en: "Manage packages" },
{ id: "provider-add-package", ar: "إضافة باقة", en: "Add package" },
{ id: "provider-meeting-points", ar: "نقاط التجمع", en: "Meeting points" },
{ id: "provider-profile", ar: "الملف التجاري", en: "Business profile" },
...(isAdminProvider
? [
{
id: "admin-switch",
ar: "الانتقال إلى وضع الأدمن",
en: "Switch to admin",
},
]
: []),
{ id: "customer-switch", ar: "تجربة العميل", en: "Customer experience" },
{ id: "home", ar: "تصفح الموقع الرئيسي", en: "Browse main website" },
{ id: "signout", ar: "تسجيل الخروج", en: "Sign out" },
];
const adminItems = [
{ id: "admin-dashboard", ar: "لوحة تحكم الأدمن", en: "Admin dashboard" },
{
id: "provider-switch",
ar: "العودة إلى وضع المزود",
en: "Return to provider mode",
},
{ id: "customer-switch", ar: "تجربة العميل", en: "Customer experience" },
];
const items = isAdminMode
? adminItems
: isProviderPortal
? providerItems
: visitorItems;
const switchToAdmin = async () => {
setMenuOpen(false);
localStorage.setItem("duyuf_dashboard_mode", "admin");
if (localStorage.getItem("duyuf_admin_session"))
return ctx?.setPage("admin-dashboard");
try {
const user = firebase.auth().currentUser;
if (!user) return ctx?.setPage("admin-login");
const idToken = await user.getIdToken(true);
const response = await fetch(
`${window.DUYUF_API_URL}/v1/auth/firebase-admin`,
{
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({ idToken }),
},
);
const body = await response.json();
if (!response.ok) throw new Error(body.error || "admin_login_failed");
localStorage.setItem("duyuf_admin_session", body.sessionToken);
localStorage.setItem("duyuf_admin", JSON.stringify(body.admin));
ctx?.setPage("admin-dashboard");
} catch (_) {
ctx?.setPage("admin-login");
}
};
const navigate = (page) => {
if (page === "admin-dashboard")
localStorage.setItem("duyuf_dashboard_mode", "admin");
if (page === "provider-dashboard")
localStorage.setItem("duyuf_dashboard_mode", "provider");
if (page === "umrah") {
ctx?.setPage("home");
setMenuOpen(false);
window.setTimeout(() =>
document.getElementById("umrah-home-search")?.scrollIntoView({ behavior: "smooth", block: "center" }),
60);
return;
}
if (page === "admin-switch") return switchToAdmin();
if (page === "provider-switch") {
setMenuOpen(false);
if (!localStorage.getItem("duyuf_provider_session"))
return ctx?.setPage("signin");
localStorage.setItem("duyuf_dashboard_mode", "provider");
window.location.assign("/?page=provider-dashboard&mode=provider");
return;
}
if(page==="customer-switch"){
setMenuOpen(false);
localStorage.setItem("duyuf_dashboard_mode","customer");
ctx?.setPage("customer-bookings");
return;
}
if (page === "signout") return logout();
ctx?.setPage(page);
setMenuOpen(false);
};
const logout = async () => {
try {
await firebase.auth().signOut();
} catch (_) {}
localStorage.removeItem("duyuf_provider_session");
localStorage.removeItem("duyuf_provider");
localStorage.removeItem("duyuf_admin_session");
localStorage.removeItem("duyuf_admin");
localStorage.removeItem("duyuf_customer");
setMenuOpen(false);
ctx?.setPage("home");
};
return (
<>
navigate(
isAdminMode
? "admin-dashboard"
: isProviderPortal || isProvider
? "provider-dashboard"
: "home",
)
}
style={{ cursor: "pointer" }}
>
{languageOpen && (
{[
["ar", "العربية"],
["en", "English"],
].map(([code, label]) => (
))}
)}
{menuOpen && (