'use client' import { useEffect, useState } from 'react' import Link from 'next/link' import { useRouter } from 'next/navigation' import { useStorefrontPreferences } from '@/components/StorefrontShell' const API_BASE = process.env.NEXT_PUBLIC_API_URL ?? 'http://localhost:4000/api/v1' interface SavedCompany { id: string brand?: { displayName: string subdomain: string logoUrl?: string | null } | null } interface RenterProfile { id: string firstName: string lastName: string email: string phone?: string | null savedCompanies?: SavedCompany[] } type Status = 'loading' | 'ready' | 'error' export default function RenterDashboardPage() { const router = useRouter() const { language } = useStorefrontPreferences() const dict = { en: { loadProfile: 'Could not load profile.', reachServer: 'Could not reach the server.', backToExplore: 'Back to explore', renterDashboard: 'Renter Dashboard', welcome: 'Welcome back,', exploreVehicles: 'Explore vehicles', logout: 'Log out', cards: [ ['Profile', 'Review your account details and preferences.'], ['Saved companies', 'Jump back into companies you bookmarked.'], ['Notifications', 'See booking updates and in-app alerts.'], ], yourProfile: 'Your profile', firstName: 'First name', lastName: 'Last name', email: 'Email', phone: 'Phone', savedCompanies: 'Saved companies', noneSaved: 'None saved yet', saved: 'saved', saveCompaniesPrompt: 'Save companies you like while browsing the storefront.', startExploring: 'Start exploring', rentalCompany: 'Rental company', }, fr: { loadProfile: 'Impossible de charger le profil.', reachServer: 'Impossible de joindre le serveur.', backToExplore: 'Retour à l’exploration', renterDashboard: 'Espace client', welcome: 'Bon retour,', exploreVehicles: 'Explorer les véhicules', logout: 'Déconnexion', cards: [ ['Profil', 'Consultez vos informations et préférences.'], ['Entreprises sauvegardées', 'Revenez vers les entreprises que vous avez enregistrées.'], ['Notifications', 'Consultez les mises à jour de réservation et les alertes.'], ], yourProfile: 'Votre profil', firstName: 'Prénom', lastName: 'Nom', email: 'E-mail', phone: 'Téléphone', savedCompanies: 'Entreprises sauvegardées', noneSaved: 'Aucune pour le moment', saved: 'sauvegardées', saveCompaniesPrompt: 'Enregistrez les entreprises que vous aimez en parcourant la storefront.', startExploring: 'Commencer à explorer', rentalCompany: 'Société de location', }, ar: { loadProfile: 'تعذر تحميل الملف الشخصي.', reachServer: 'تعذر الوصول إلى الخادم.', backToExplore: 'العودة إلى الاستكشاف', renterDashboard: 'بوابة المستأجر', welcome: 'مرحباً بعودتك،', exploreVehicles: 'استكشف السيارات', logout: 'تسجيل الخروج', cards: [ ['الملف الشخصي', 'راجع بيانات حسابك وتفضيلاتك.'], ['الشركات المحفوظة', 'ارجع بسرعة إلى الشركات التي حفظتها.'], ['الإشعارات', 'اطلع على تحديثات الحجز والتنبيهات داخل التطبيق.'], ], yourProfile: 'ملفك الشخصي', firstName: 'الاسم الأول', lastName: 'اسم العائلة', email: 'البريد الإلكتروني', phone: 'الهاتف', savedCompanies: 'الشركات المحفوظة', noneSaved: 'لا يوجد شيء محفوظ بعد', saved: 'محفوظة', saveCompaniesPrompt: 'احفظ الشركات التي تعجبك أثناء تصفح السوق.', startExploring: 'ابدأ الاستكشاف', rentalCompany: 'شركة تأجير', }, }[language] const [profile, setProfile] = useState(null) const [status, setStatus] = useState('loading') const [errorMsg, setErrorMsg] = useState('') useEffect(() => { fetch(`${API_BASE}/auth/renter/me`, { credentials: 'include', }) .then(async (res) => { const json = await res.json().catch(() => null) if (!res.ok) { if (res.status === 401) { void fetch(`${API_BASE}/auth/renter/logout`, { method: 'POST', credentials: 'include' }) router.replace('/') } else { setErrorMsg(json?.message ?? dict.loadProfile) setStatus('error') } return } setProfile(json?.data ?? json) setStatus('ready') }) .catch(() => { setErrorMsg(dict.reachServer) setStatus('error') }) }, [router]) if (status === 'loading') { return (
) } if (status === 'error') { return (

{errorMsg}

{dict.backToExplore}
) } const savedCompanies = profile?.savedCompanies ?? [] return (

{dict.renterDashboard}

{dict.welcome} {profile?.firstName}

{dict.exploreVehicles}
{[ { href: '/renter/profile', label: dict.cards[0][0], copy: dict.cards[0][1] }, { href: '/renter/saved-companies', label: dict.cards[1][0], copy: dict.cards[1][1] }, { href: '/renter/notifications', label: dict.cards[2][0], copy: dict.cards[2][1] }, ].map((item) => (

{item.label}

{item.copy}

))}
{/* Profile card */}

{dict.yourProfile}

{[ { label: dict.firstName, value: profile?.firstName }, { label: dict.lastName, value: profile?.lastName }, { label: dict.email, value: profile?.email }, { label: dict.phone, value: profile?.phone ?? '—' }, ].map(({ label, value }) => (

{label}

{value}

))}
{/* Saved companies */}

{dict.savedCompanies}

{savedCompanies.length === 0 ? dict.noneSaved : `${savedCompanies.length} ${dict.saved}`}

{savedCompanies.length === 0 ? (

{dict.saveCompaniesPrompt}

{dict.startExploring}
) : (
{savedCompanies.map((company) => ( {company.brand?.logoUrl ? ( // eslint-disable-next-line @next/next/no-img-element {company.brand.displayName} ) : (
{company.brand?.displayName?.charAt(0) ?? '?'}
)}

{company.brand?.displayName ?? dict.rentalCompany}

{company.brand?.subdomain ?? ''}

))}
)}
) }