'use client' import Link from 'next/link' import { useState, Suspense } from 'react' import { useSearchParams } from 'next/navigation' import { useDashboardI18n } from '@/components/I18nProvider' import { API_BASE } from '@/lib/api' export default function ResetPasswordPage() { return ( ) } function ResetPasswordContent() { const { language } = useDashboardI18n() const dict = { en: { title: 'Set new password', subtitle: 'Choose a strong password for your workspace account.', newPassword: 'New password', confirmPassword: 'Confirm password', submit: 'Reset password', submitting: 'Resetting…', backToLogin: 'Back to sign in', successTitle: 'Password updated', successBody: 'Your password has been reset. You can now sign in with your new password.', signIn: 'Sign in', errorMismatch: 'Passwords do not match.', errorShort: 'Password must be at least 8 characters.', errorInvalidToken: 'This reset link is invalid or has expired. Please request a new one.', errorGeneric: 'Something went wrong. Please try again.', noToken: 'No reset token found. Please request a new password reset.', requestNew: 'Request new reset link', }, fr: { title: 'Nouveau mot de passe', subtitle: "Choisissez un mot de passe fort pour votre compte.", newPassword: 'Nouveau mot de passe', confirmPassword: 'Confirmer le mot de passe', submit: 'Réinitialiser', submitting: 'Traitement…', backToLogin: 'Retour à la connexion', successTitle: 'Mot de passe mis à jour', successBody: 'Votre mot de passe a été réinitialisé. Vous pouvez maintenant vous connecter.', signIn: 'Se connecter', errorMismatch: 'Les mots de passe ne correspondent pas.', errorShort: 'Le mot de passe doit contenir au moins 8 caractères.', errorInvalidToken: 'Ce lien est invalide ou a expiré. Veuillez en demander un nouveau.', errorGeneric: 'Une erreur est survenue. Veuillez réessayer.', noToken: 'Aucun jeton trouvé. Veuillez demander une réinitialisation.', requestNew: 'Demander un nouveau lien', }, ar: { title: 'تعيين كلمة مرور جديدة', subtitle: 'اختر كلمة مرور قوية لحساب مساحة العمل.', newPassword: 'كلمة المرور الجديدة', confirmPassword: 'تأكيد كلمة المرور', submit: 'إعادة تعيين', submitting: 'جارٍ المعالجة…', backToLogin: 'العودة إلى تسجيل الدخول', successTitle: 'تم تحديث كلمة المرور', successBody: 'تم إعادة تعيين كلمة المرور. يمكنك الآن تسجيل الدخول.', signIn: 'تسجيل الدخول', errorMismatch: 'كلمتا المرور غير متطابقتين.', errorShort: 'يجب أن تتكون كلمة المرور من 8 أحرف على الأقل.', errorInvalidToken: 'رابط إعادة التعيين غير صالح أو منتهي الصلاحية.', errorGeneric: 'حدث خطأ ما. يرجى المحاولة مرة أخرى.', noToken: 'لم يتم العثور على رمز. يرجى طلب إعادة تعيين.', requestNew: 'طلب رابط جديد', }, }[language] const searchParams = useSearchParams() const token = searchParams.get('token') const [password, setPassword] = useState('') const [confirm, setConfirm] = useState('') const [loading, setLoading] = useState(false) const [done, setDone] = useState(false) const [error, setError] = useState(null) async function handleSubmit(e: React.FormEvent) { e.preventDefault() if (password.length < 8) { setError(dict.errorShort); return } if (password !== confirm) { setError(dict.errorMismatch); return } setLoading(true) setError(null) try { const res = await fetch(`${API_BASE}/auth/employee/reset-password`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ token, password }), }) const json = await res.json() if (!res.ok) { if (json?.error === 'invalid_token') throw new Error(dict.errorInvalidToken) throw new Error(dict.errorGeneric) } setDone(true) } catch (err: any) { setError(err.message ?? dict.errorGeneric) } finally { setLoading(false) } } if (!token) { return (

{dict.noToken}

{dict.requestNew}
) } if (done) { return (

{dict.successTitle}

{dict.successBody}

{dict.signIn}
) } return (
{error && (
{error}
)}
setPassword(e.target.value)} placeholder="••••••••" className="input-field" />
setConfirm(e.target.value)} placeholder="••••••••" className="input-field" />
{dict.backToLogin}
) } function ResetShell({ title, subtitle, children }: { title: string; subtitle?: string; children: React.ReactNode }) { return (
RentalDriveGo

{title}

{subtitle &&

{subtitle}

}
{children}
) }