diff --git a/app/register/owner/page.js b/app/register/owner/page.js index b4852d4..8dd0e18 100644 --- a/app/register/owner/page.js +++ b/app/register/owner/page.js @@ -1,624 +1,8 @@ -// 'use client'; - -// import { useState, useRef, useMemo } from 'react'; -// import { motion, AnimatePresence } from 'framer-motion'; -// import { useRouter } from 'next/navigation'; -// import Link from 'next/link'; -// import Image from 'next/image'; -// import { -// User, Mail, Phone, Lock, Eye, EyeOff, MessageCircle, -// Camera, X, CheckCircle, XCircle, ArrowLeft, Building, -// Loader2, Shield, KeyRound -// } from 'lucide-react'; -// import toast, { Toaster } from 'react-hot-toast'; -// import { addOwner, loginWithEmail, sendEmailOTP, verifyEmail } from '../../utils/api'; -// import AuthService from '../../services/AuthService'; -// import { OwnerType, OwnerTypeLabels } from '../../enums'; - -// export default function OwnerRegisterPage() { -// const router = useRouter(); -// const [step, setStep] = useState(1); // 1=form, 2=id images -// const [showOtpModal, setShowOtpModal] = useState(false); -// const [showPassword, setShowPassword] = useState(false); -// const [showConfirmPassword, setShowConfirmPassword] = useState(false); -// const [isLoading, setIsLoading] = useState(false); - -// const [formData, setFormData] = useState({ -// firstName: '', -// lastName: '', -// email: '', -// phone: '', -// whatsapp: '', -// phone2: '', -// nationalNumber: '', -// password: '', -// confirmPassword: '', -// ownerType: OwnerType.PERSON, -// agreeTerms: false -// }); - -// const [idImages, setIdImages] = useState({ front: null, back: null }); -// const [idImagePreviews, setIdImagePreviews] = useState({ front: '', back: '' }); -// const [otpCode, setOtpCode] = useState(''); -// const [errors, setErrors] = useState({}); - -// const fileInputFrontRef = useRef(null); -// const fileInputBackRef = useRef(null); - -// const handleImageUpload = (side, file) => { -// if (!file) return; -// if (!file.type.startsWith('image/')) { -// toast.error('الرجاء اختيار صورة صالحة'); -// return; -// } -// if (file.size > 5 * 1024 * 1024) { -// toast.error('حجم الصورة يجب أن يكون أقل من 5 ميجابايت'); -// return; -// } -// const reader = new FileReader(); -// reader.onloadend = () => { -// setIdImagePreviews(prev => ({ ...prev, [side]: reader.result })); -// }; -// reader.readAsDataURL(file); -// setIdImages(prev => ({ ...prev, [side]: file })); -// console.log('[OwnerRegister] Image uploaded:', side); -// toast.success('تم رفع الصورة بنجاح', { style: { background: '#dcfce7', color: '#166534' } }); -// }; - -// const validateEmail = (email) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email); -// const validatePhone = (phone) => /^(09|05)[0-9]{8}$/.test(phone); - -// const validateStep1 = () => { -// const newErrors = {}; -// if (!formData.firstName) newErrors.firstName = 'الاسم الأول مطلوب'; -// if (!formData.lastName) newErrors.lastName = 'اسم العائلة مطلوب'; - - -// if (!formData.email) newErrors.email = 'البريد الإلكتروني مطلوب'; -// else if (!validateEmail(formData.email)) newErrors.email = 'البريد الإلكتروني غير صالح'; - -// if (!formData.whatsapp) newErrors.whatsapp = 'رقم الواتساب مطلوب'; -// else if (!validatePhone(formData.whatsapp)) newErrors.whatsapp = 'رقم الواتساب غير صالح (يجب أن يبدأ 09 أو 05)'; - -// if (formData.phone && !validatePhone(formData.phone)) newErrors.phone = 'رقم الهاتف غير صالح'; - -// if (!formData.password) newErrors.password = 'كلمة المرور مطلوبة'; -// else if (formData.password.length < 6) newErrors.password = 'كلمة المرور يجب أن تكون 6 أحرف على الأقل'; - -// if (formData.password !== formData.confirmPassword) newErrors.confirmPassword = 'كلمات المرور غير متطابقة'; - -// setErrors(newErrors); -// return Object.keys(newErrors).length === 0; -// }; - -// const validateStep2 = () => { -// const newErrors = {}; -// if (!idImages.front) newErrors.front = 'صورة الوجه الأمامي للهوية مطلوبة'; -// if (!idImages.back) newErrors.back = 'صورة الوجه الخلفي للهوية مطلوبة'; -// setErrors(newErrors); -// return Object.keys(newErrors).length === 0; -// }; - -// const handleNextStep = () => { -// if (validateStep1()) { -// console.log('[OwnerRegister] Step 1 valid, moving to step 2'); -// setStep(2); -// window.scrollTo({ top: 0, behavior: 'smooth' }); -// } else { -// toast.error('يرجى تصحيح الأخطاء في النموذج'); -// } -// }; - -// // ─── Main signup handler ─── -// const handleSubmit = async (e) => { -// e.preventDefault(); - -// if (!validateStep2()) { -// toast.error('يرجى إكمال جميع الصور المطلوبة'); -// return; -// } -// if (!formData.agreeTerms) { -// toast.error('يجب الموافقة على الشروط والأحكام'); -// return; -// } - -// setIsLoading(true); -// console.log('[OwnerRegister] Submitting owner registration...'); - -// const payload = { -// firstName: formData.firstName, -// lastName: formData.lastName, -// email: formData.email, -// phoneNumber: formData.phone || '', -// whatsAppNumber: formData.whatsapp, -// phone: formData.phone2, -// nationalNumber: formData.nationalNumber, -// password: formData.password, -// ownerType: formData.ownerType, -// }; - -// try { -// const res = await addOwner(payload, idImages.front, idImages.back); -// console.log('[OwnerRegister] addOwner response:', res); - -// if (res.status === 200 || res.ok) { -// const tempToken = res.data; -// if (tempToken) { -// AuthService.addToken(tempToken); -// console.log('[OwnerRegister] Temp token stored for OTP'); -// } - -// const apiMessage = res.message || res.data?.message; -// toast.success(apiMessage || 'تم إنشاء الحساب! يرجى التحقق من بريدك الإلكتروني', { duration: 4000 }); - -// // Auto-login to trigger OTP -// console.log('[OwnerRegister] Auto-login to send OTP...'); -// const loginRes = await loginWithEmail(formData.email, formData.password); -// console.log('[OwnerRegister] login response:', loginRes); - -// if (loginRes.status === 206) { -// const otpToken = loginRes.data; -// if (otpToken) AuthService.addToken(otpToken); -// const loginMsg = loginRes.message || loginRes.data?.message; -// toast(loginMsg || 'تم إرسال رمز التحقق إلى بريدك الإلكتروني', { icon: '📧' }); -// setShowOtpModal(true); -// } else if (loginRes.status === 200) { -// const loginToken = loginRes.data; -// if (loginToken) AuthService.addToken(loginToken); -// toast.success(loginRes.message || 'تم تسجيل الدخول بنجاح!'); -// router.push('/'); -// } -// } else { -// const errMsg = res.message || res.data?.message || 'فشل في إنشاء الحساب'; -// console.error('[OwnerRegister] Registration failed:', errMsg); -// toast.error(errMsg); -// } -// } catch (err) { -// console.error('[OwnerRegister] Error:', err); -// toast.error(err.message || 'حدث خطأ أثناء التسجيل'); -// } finally { -// setIsLoading(false); -// } -// }; - -// // ─── OTP verification handler ─── -// const handleVerifyOTP = async () => { -// if (!otpCode || otpCode.length < 4) { -// toast.error('يرجى إدخال رمز التحقق'); -// return; -// } - -// setIsLoading(true); -// console.log('[OwnerRegister] Verifying OTP:', otpCode); - -// try { -// const res = await verifyEmail(otpCode); -// console.log('[OwnerRegister] VerifyEmail response:', res); - -// if (res.status === 200) { -// AuthService.deleteToken(); -// console.log('[OwnerRegister] Temp token removed after verification'); -// toast.success(res.message || 'تم التحقق من البريد الإلكتروني بنجاح!', { duration: 3000 }); -// setShowOtpModal(false); -// setTimeout(() => router.push('/login'), 1500); -// } else { -// const errMsg = res.message || res.data?.message || 'رمز التحقق غير صحيح'; -// console.error('[OwnerRegister] Verification failed:', errMsg); -// toast.error(errMsg); -// } -// } catch (err) { -// console.error('[OwnerRegister] Verify error:', err); -// toast.error(err.message || 'حدث خطأ أثناء التحقق'); -// } finally { -// setIsLoading(false); -// } -// }; - -// const handleResendOTP = async () => { -// setIsLoading(true); -// console.log('[OwnerRegister] Resending email OTP...'); -// try { -// await sendEmailOTP(); -// toast.success('تم إرسال رمز تحقق جديد'); -// } catch (err) { -// console.error('[OwnerRegister] Resend OTP error:', err); -// toast.error('فشل في إرسال الرمز'); -// } finally { -// setIsLoading(false); -// } -// }; - -// const fadeInUp = { -// initial: { opacity: 0, y: 20 }, -// animate: { opacity: 1, y: 0 }, -// transition: { duration: 0.5 } -// }; - -// const staggerContainer = { -// animate: { transition: { staggerChildren: 0.1 } } -// }; - - -// const backgroundElements = useMemo(() => { -// const circles = [ -// { style: { top: '20%', right: '20%', width: '256px', height: '256px' }, className: 'bg-amber-500/5' }, -// { style: { bottom: '20%', left: '20%', width: '320px', height: '320px' }, className: 'bg-blue-500/5' }, -// { style: { top: '50%', left: '50%', width: '384px', height: '384px', transform: 'translate(-50%, -50%)' }, className: 'bg-purple-500/5' }, -// ]; - -// const dots = [ -// { left: '5%', top: '10%', size: '120px' }, -// { left: '15%', top: '70%', size: '80px' }, -// { left: '25%', top: '30%', size: '150px' }, -// { left: '35%', top: '85%', size: '100px' }, -// { left: '45%', top: '15%', size: '90px' }, -// { left: '55%', top: '60%', size: '130px' }, -// { left: '65%', top: '40%', size: '70px' }, -// { left: '75%', top: '80%', size: '110px' }, -// { left: '85%', top: '20%', size: '140px' }, -// { left: '95%', top: '50%', size: '85px' }, -// ]; - -// return ( -// <> -// {circles.map((circle, i) => ( -//
-// ))} -// {dots.map((dot, i) => ( -//
-// ))} -// -// ); -// }, []); - - -// return ( -//
-// - -// {/*
-// {[...Array(20)].map((_, i) => ( -// -// ))} -//
*/} - -//
-// {backgroundElements} -//
- -// -// {/* Progress */} -//
-//
-// -// -// العودة -// -// خطوة {step} من 2 -//
-//
-// {[1, 2].map((s) => ( -// = s ? 'bg-amber-500' : 'bg-gray-700'}`} animate={{ scaleX: step >= s ? 1 : 0.5 }} /> -// ))} -//
-//
- -// -//
-// -// -// -// -// -//

-// {step === 1 ? 'معلومات المالك' : 'الوثائق الرسمية'} -//

-//

-// {step === 1 ? 'أدخل معلوماتك الأساسية' : 'يرجى رفع صور الهوية للتحقق'} -//

-//
-//
- -//
-// { e.preventDefault(); handleNextStep(); } : handleSubmit} -// className="space-y-6"> - -// {/* ─── STEP 1: Form ─── */} -// {step === 1 && ( -// <> -// -//
-// -//
-//
-// -//
-// { setFormData({...formData, firstName: e.target.value}); setErrors({...errors, firstName: null}); }} -// className={`w-full pr-12 pl-4 py-3 bg-white/5 border rounded-xl focus:outline-none focus:ring-2 focus:ring-amber-500 focus:border-transparent text-white placeholder-gray-500 transition-all ${errors.firstName ? 'border-red-500' : 'border-gray-700'}`} -// placeholder="الاسم الأول" /> -//
-// {errors.firstName &&

{errors.firstName}

} -//
-//
-// -// { setFormData({...formData, lastName: e.target.value}); setErrors({...errors, lastName: null}); }} -// className={`w-full px-4 py-3 bg-white/5 border rounded-xl focus:outline-none focus:ring-2 focus:ring-amber-500 focus:border-transparent text-white placeholder-gray-500 transition-all ${errors.lastName ? 'border-red-500' : 'border-gray-700'}`} -// placeholder="اسم العائلة" /> -// {errors.lastName &&

{errors.lastName}

} -//
-//
- -// -// -//
-//
-// -//
-// { setFormData({...formData, email: e.target.value}); setErrors({...errors, email: null}); }} -// className={`w-full pr-12 pl-4 py-3 bg-white/5 border rounded-xl focus:outline-none focus:ring-2 focus:ring-amber-500 focus:border-transparent text-white placeholder-gray-500 transition-all ${errors.email ? 'border-red-500' : 'border-gray-700'}`} -// placeholder="أدخل بريدك الإلكتروني" /> -//
-// {errors.email &&

{errors.email}

} -//
- -// -// -//
-//
-// -//
-// { setFormData({...formData, phone: e.target.value}); setErrors({...errors, phone: null}); }} -// className="w-full pr-12 pl-4 py-3 bg-white/5 border border-gray-700 rounded-xl focus:outline-none focus:ring-2 focus:ring-amber-500 focus:border-transparent text-white placeholder-gray-500 transition-all" -// placeholder="أدخل رقم هاتفك (اختياري)" /> -//
-// {errors.phone &&

{errors.phone}

} -//
- -// -// -//
-//
-// -//
-// { setFormData({...formData, whatsapp: e.target.value}); setErrors({...errors, whatsapp: null}); }} -// className={`w-full pr-12 pl-4 py-3 bg-white/5 border rounded-xl focus:outline-none focus:ring-2 focus:ring-amber-500 focus:border-transparent text-white placeholder-gray-500 transition-all ${errors.whatsapp ? 'border-red-500' : 'border-gray-700'}`} -// placeholder="أدخل رقم الواتساب" /> -//
-// {errors.whatsapp &&

{errors.whatsapp}

} -//
- -// -// -//
-//
-// -//
-// { setFormData({...formData, phone2: e.target.value}); setErrors({...errors, phone2: null}); }} -// className={`w-full pr-12 pl-4 py-3 bg-white/5 border rounded-xl focus:outline-none focus:ring-2 focus:ring-amber-500 focus:border-transparent text-white placeholder-gray-500 transition-all ${errors.phone2 ? 'border-red-500' : 'border-gray-700'}`} -// placeholder="أدخل رقم الهاتف" maxLength={7} /> -//
-// {errors.phone2 &&

{errors.phone2}

} -//
- -// -// -//
-//
-// -//
-// { setFormData({...formData, nationalNumber: e.target.value}); setErrors({...errors, nationalNumber: null}); }} -// className={`w-full pr-12 pl-4 py-3 bg-white/5 border rounded-xl focus:outline-none focus:ring-2 focus:ring-amber-500 focus:border-transparent text-white placeholder-gray-500 transition-all ${errors.nationalNumber ? 'border-red-500' : 'border-gray-700'}`} -// placeholder="أدخل الرقم الوطني" /> -//
-// {errors.nationalNumber &&

{errors.nationalNumber}

} -//
- -// -// -// -// - -// -// -//
-//
-// -//
-// { setFormData({...formData, password: e.target.value}); setErrors({...errors, password: null}); }} -// className={`w-full pr-12 pl-12 py-3 bg-white/5 border rounded-xl focus:outline-none focus:ring-2 focus:ring-amber-500 focus:border-transparent text-white placeholder-gray-500 transition-all ${errors.password ? 'border-red-500' : 'border-gray-700'}`} -// placeholder="أدخل كلمة المرور" /> -// -//
-// {errors.password &&

{errors.password}

} -//
- -// -// -//
-//
-// -//
-// { setFormData({...formData, confirmPassword: e.target.value}); setErrors({...errors, confirmPassword: null}); }} -// className={`w-full pr-12 pl-12 py-3 bg-white/5 border rounded-xl focus:outline-none focus:ring-2 focus:ring-amber-500 focus:border-transparent text-white placeholder-gray-500 transition-all ${errors.confirmPassword ? 'border-red-500' : 'border-gray-700'}`} -// placeholder="أعد إدخال كلمة المرور" /> -// -// {formData.confirmPassword && ( -//
-// {formData.password === formData.confirmPassword ? : } -//
-// )} -//
-// {errors.confirmPassword &&

{errors.confirmPassword}

} -//
-// -// )} - -// {/* ─── STEP 2: ID Images ─── */} -// {step === 2 && ( -// <> -// -// -//
fileInputFrontRef.current?.click()} -// className={`relative border-2 border-dashed rounded-xl p-6 text-center cursor-pointer transition-all ${idImagePreviews.front ? 'border-green-500 bg-green-500/10' : errors.front ? 'border-red-500 bg-red-500/10' : 'border-gray-700 hover:border-amber-500 hover:bg-white/5'}`}> -// handleImageUpload('front', e.target.files?.[0])} className="hidden" /> -// {idImagePreviews.front ? ( -//
-// Front ID -// -//
-// ) : (<>

اضغط لرفع الصورة

JPEG, PNG, JPG • حتى 5MB

)} -//
-// {errors.front &&

{errors.front}

} -//
- -// -// -//
fileInputBackRef.current?.click()} -// className={`relative border-2 border-dashed rounded-xl p-6 text-center cursor-pointer transition-all ${idImagePreviews.back ? 'border-green-500 bg-green-500/10' : errors.back ? 'border-red-500 bg-red-500/10' : 'border-gray-700 hover:border-amber-500 hover:bg-white/5'}`}> -// handleImageUpload('back', e.target.files?.[0])} className="hidden" /> -// {idImagePreviews.back ? ( -//
-// Back ID -// -//
-// ) : (<>

اضغط لرفع الصورة

JPEG, PNG, JPG • حتى 5MB

)} -//
-// {errors.back &&

{errors.back}

} -//
- -// -// setFormData({...formData, agreeTerms: e.target.checked})} -// className="w-4 h-4 rounded border-gray-600 bg-white/5 text-amber-500 focus:ring-amber-500" required /> -// -// -// -// )} - -// {/* ─── Buttons ─── */} -// -// {step === 1 ? ( -// <> -// -// -// -// ) : ( -// <> -// -// -// -// )} -// -//
-//
-//
-//
- -// {/* ─── OTP Modal ─── */} -// -// {showOtpModal && ( -// -// -//
-//
-// -//
-//

التحقق من البريد

-//

تم إرسال رمز التحقق إلى

-//

{formData.email}

-//
- -//
-// -//
-//
-// -//
-// setOtpCode(e.target.value)} -// className="w-full pr-12 pl-4 py-3 bg-white/5 border border-gray-700 rounded-xl focus:outline-none focus:ring-2 focus:ring-amber-500 text-white text-center tracking-[0.5em] text-xl" -// placeholder="------" /> -//
-//
- -//
-// -//
- -// -//
-//
-// )} -//
-//
-// ); -// } - - - - - +// app/register/owner/page.js 'use client'; -import { useState, useRef, useMemo, useEffect } from 'react'; +import { useState, useRef, useMemo } from 'react'; import { motion, AnimatePresence } from 'framer-motion'; import { useRouter } from 'next/navigation'; import Link from 'next/link'; @@ -626,7 +10,7 @@ import Image from 'next/image'; import { User, Mail, Phone, Lock, Eye, EyeOff, MessageCircle, Camera, X, CheckCircle, XCircle, ArrowLeft, Building, - Loader2, Shield, KeyRound, Briefcase, FileText, MapPin + Loader2, Shield, KeyRound, FileText } from 'lucide-react'; import toast, { Toaster } from 'react-hot-toast'; import { addOwner, loginWithEmail, sendEmailOTP, verifyEmail } from '../../utils/api'; @@ -635,7 +19,7 @@ import { OwnerType, OwnerTypeLabels } from '../../enums'; export default function OwnerRegisterPage() { const router = useRouter(); - const [step, setStep] = useState(1); + const [step, setStep] = useState(1); const [showOtpModal, setShowOtpModal] = useState(false); const [showPassword, setShowPassword] = useState(false); const [showConfirmPassword, setShowConfirmPassword] = useState(false); @@ -652,8 +36,6 @@ export default function OwnerRegisterPage() { password: '', confirmPassword: '', ownerType: OwnerType.PERSON, - licenseNumber: '', - companyAddress: '', agreeTerms: false }); @@ -666,11 +48,7 @@ export default function OwnerRegisterPage() { const fileInputBackRef = useRef(null); const fileInputLicenseRef = useRef(null); - const [isCompany, setIsCompany] = useState(Number(formData.ownerType) === OwnerType.REAL_ESTATE_AGENCY); - - useEffect(() => { - setIsCompany(Number(formData.ownerType) === OwnerType.REAL_ESTATE_AGENCY); - }, [formData.ownerType]); + const isCompany = Number(formData.ownerType) === OwnerType.REAL_ESTATE_AGENCY; const handleImageUpload = (side, file) => { if (!file) return; @@ -688,7 +66,6 @@ export default function OwnerRegisterPage() { }; reader.readAsDataURL(file); setIdImages(prev => ({ ...prev, [side]: file })); - console.log('[OwnerRegister] Image uploaded:', side); toast.success('تم رفع الصورة بنجاح', { style: { background: '#dcfce7', color: '#166534' } }); }; @@ -699,25 +76,14 @@ export default function OwnerRegisterPage() { const newErrors = {}; if (!formData.firstName) newErrors.firstName = 'الاسم الأول مطلوب'; if (!formData.lastName) newErrors.lastName = 'اسم العائلة مطلوب'; - if (!formData.email) newErrors.email = 'البريد الإلكتروني مطلوب'; else if (!validateEmail(formData.email)) newErrors.email = 'البريد الإلكتروني غير صالح'; - if (!formData.whatsapp) newErrors.whatsapp = 'رقم الواتساب مطلوب'; else if (!validatePhone(formData.whatsapp)) newErrors.whatsapp = 'رقم الواتساب غير صالح (يجب أن يبدأ 09 أو 05)'; - if (formData.phone && !validatePhone(formData.phone)) newErrors.phone = 'رقم الهاتف غير صالح'; - if (!formData.password) newErrors.password = 'كلمة المرور مطلوبة'; else if (formData.password.length < 6) newErrors.password = 'كلمة المرور يجب أن تكون 6 أحرف على الأقل'; - if (formData.password !== formData.confirmPassword) newErrors.confirmPassword = 'كلمات المرور غير متطابقة'; - - if (isCompany) { - if (!formData.licenseNumber) newErrors.licenseNumber = 'رقم الرخصة/السجل التجاري مطلوب'; - if (!formData.companyAddress) newErrors.companyAddress = 'عنوان المكتب مطلوب'; - } - setErrors(newErrors); return Object.keys(newErrors).length === 0; }; @@ -732,7 +98,6 @@ export default function OwnerRegisterPage() { const handleNextStep = () => { if (validateStep1()) { - console.log('[OwnerRegister] Step 1 valid, moving to step 2'); setStep(2); window.scrollTo({ top: 0, behavior: 'smooth' }); } else { @@ -742,7 +107,6 @@ export default function OwnerRegisterPage() { const handleSubmit = async (e) => { e.preventDefault(); - if (!validateStep2()) { toast.error('يرجى إكمال جميع الصور المطلوبة'); return; @@ -753,8 +117,6 @@ export default function OwnerRegisterPage() { } setIsLoading(true); - console.log('[OwnerRegister] Submitting owner registration...'); - const payload = { firstName: formData.firstName, lastName: formData.lastName, @@ -767,35 +129,20 @@ export default function OwnerRegisterPage() { ownerType: formData.ownerType, }; - if (isCompany) { - payload.licenseNumber = formData.licenseNumber; - payload.companyAddress = formData.companyAddress; - } - try { - const res = await addOwner(payload, idImages.front, idImages.back, isCompany ? idImages.license : null); - console.log('[OwnerRegister] addOwner response:', res); - + // تمرير صورة الرخصة فقط إذا كان نوع المالك وكالة عقارية + const licenseImage = isCompany ? idImages.license : null; + const res = await addOwner(payload, idImages.front, idImages.back, licenseImage); if (res.status === 200 || res.ok) { const tempToken = res.data; - if (tempToken) { - AuthService.addToken(tempToken); - console.log('[OwnerRegister] Temp token stored for OTP'); - } + if (tempToken) AuthService.addToken(tempToken); + toast.success(res.message || 'تم إنشاء الحساب! يرجى التحقق من بريدك الإلكتروني', { duration: 4000 }); - const apiMessage = res.message || res.data?.message; - toast.success(apiMessage || 'تم إنشاء الحساب! يرجى التحقق من بريدك الإلكتروني', { duration: 4000 }); - - // Auto-login to trigger OTP - console.log('[OwnerRegister] Auto-login to send OTP...'); const loginRes = await loginWithEmail(formData.email, formData.password); - console.log('[OwnerRegister] login response:', loginRes); - if (loginRes.status === 206) { const otpToken = loginRes.data; if (otpToken) AuthService.addToken(otpToken); - const loginMsg = loginRes.message || loginRes.data?.message; - toast(loginMsg || 'تم إرسال رمز التحقق إلى بريدك الإلكتروني', { icon: '📧' }); + toast(loginRes.message || 'تم إرسال رمز التحقق إلى بريدك الإلكتروني', { icon: '📧' }); setShowOtpModal(true); } else if (loginRes.status === 200) { const loginToken = loginRes.data; @@ -804,45 +151,32 @@ export default function OwnerRegisterPage() { router.push('/'); } } else { - const errMsg = res.message || res.data?.message || 'فشل في إنشاء الحساب'; - console.error('[OwnerRegister] Registration failed:', errMsg); - toast.error(errMsg); + toast.error(res.message || res.data?.message || 'فشل في إنشاء الحساب'); } } catch (err) { - console.error('[OwnerRegister] Error:', err); toast.error(err.message || 'حدث خطأ أثناء التسجيل'); } finally { setIsLoading(false); } }; - // OTP verification handler const handleVerifyOTP = async () => { if (!otpCode || otpCode.length < 4) { toast.error('يرجى إدخال رمز التحقق'); return; } - setIsLoading(true); - console.log('[OwnerRegister] Verifying OTP:', otpCode); - try { const res = await verifyEmail(otpCode); - console.log('[OwnerRegister] VerifyEmail response:', res); - if (res.status === 200) { AuthService.deleteToken(); - console.log('[OwnerRegister] Temp token removed after verification'); - toast.success(res.message || 'تم التحقق من البريد الإلكتروني بنجاح!', { duration: 3000 }); + toast.success(res.message || 'تم التحقق من البريد الإلكتروني بنجاح!'); setShowOtpModal(false); setTimeout(() => router.push('/login'), 1500); } else { - const errMsg = res.message || res.data?.message || 'رمز التحقق غير صحيح'; - console.error('[OwnerRegister] Verification failed:', errMsg); - toast.error(errMsg); + toast.error(res.message || res.data?.message || 'رمز التحقق غير صحيح'); } } catch (err) { - console.error('[OwnerRegister] Verify error:', err); toast.error(err.message || 'حدث خطأ أثناء التحقق'); } finally { setIsLoading(false); @@ -851,12 +185,10 @@ export default function OwnerRegisterPage() { const handleResendOTP = async () => { setIsLoading(true); - console.log('[OwnerRegister] Resending email OTP...'); try { await sendEmailOTP(); toast.success('تم إرسال رمز تحقق جديد'); } catch (err) { - console.error('[OwnerRegister] Resend OTP error:', err); toast.error('فشل في إرسال الرمز'); } finally { setIsLoading(false); @@ -879,35 +211,18 @@ export default function OwnerRegisterPage() { { style: { bottom: '20%', left: '20%', width: '320px', height: '320px' }, className: 'bg-blue-500/5' }, { style: { top: '50%', left: '50%', width: '384px', height: '384px', transform: 'translate(-50%, -50%)' }, className: 'bg-purple-500/5' }, ]; - - const dots = [ - { left: '5%', top: '10%', size: '120px' }, - { left: '15%', top: '70%', size: '80px' }, - { left: '25%', top: '30%', size: '150px' }, - { left: '35%', top: '85%', size: '100px' }, - { left: '45%', top: '15%', size: '90px' }, - { left: '55%', top: '60%', size: '130px' }, - { left: '65%', top: '40%', size: '70px' }, - { left: '75%', top: '80%', size: '110px' }, - { left: '85%', top: '20%', size: '140px' }, - { left: '95%', top: '50%', size: '85px' }, - ]; - + const dots = Array.from({ length: 10 }).map((_, i) => ({ + left: `${5 + i * 10}%`, + top: `${10 + (i * 7) % 80}%`, + size: `${80 + (i % 5) * 15}px` + })); return ( <> {circles.map((circle, i) => ( -
+
))} {dots.map((dot, i) => ( -
+
))} ); @@ -916,14 +231,10 @@ export default function OwnerRegisterPage() { return (
- -
- {backgroundElements} -
+
{backgroundElements}
- {/* Progress */}
@@ -949,12 +260,8 @@ export default function OwnerRegisterPage() { className="w-20 h-20 mx-auto mb-4 bg-white/20 rounded-2xl flex items-center justify-center backdrop-blur-sm"> -

- {step === 1 ? 'معلومات المالك' : 'الوثائق الرسمية'} -

-

- {step === 1 ? 'أدخل معلوماتك الأساسية' : 'يرجى رفع صور الهوية للتحقق'} -

+

{step === 1 ? 'معلومات المالك' : 'الوثائق الرسمية'}

+

{step === 1 ? 'أدخل معلوماتك الأساسية' : 'يرجى رفع صور الهوية للتحقق'}

@@ -962,7 +269,6 @@ export default function OwnerRegisterPage() { { e.preventDefault(); handleNextStep(); } : handleSubmit} className="space-y-6"> - {step === 1 && ( <> @@ -1064,14 +370,7 @@ export default function OwnerRegisterPage() { + {/* حقل رفع صورة الرخصة - يظهر فقط للوكالات العقارية في الخطوة الأولى */} {isCompany && ( - - -
-
- + +
رفع صورة الرخصة يساعد في تسريع عملية التحقق.
+
fileInputLicenseRef.current?.click()} + className={`relative border-2 border-dashed rounded-xl p-6 text-center cursor-pointer transition-all ${idImagePreviews.license ? 'border-green-500 bg-green-500/10' : 'border-gray-700 hover:border-amber-500 hover:bg-white/5'}`}> + handleImageUpload('license', e.target.files?.[0])} className="hidden" /> + {idImagePreviews.license ? ( +
+ License +
- { setFormData({...formData, licenseNumber: e.target.value}); setErrors({...errors, licenseNumber: null}); }} - className={`w-full pr-12 pl-4 py-3 bg-white/5 border rounded-xl focus:outline-none focus:ring-2 focus:ring-amber-500 focus:border-transparent text-white placeholder-gray-500 transition-all ${errors.licenseNumber ? 'border-red-500' : 'border-gray-700'}`} - placeholder="أدخل رقم الرخصة أو السجل التجاري" /> -
- {errors.licenseNumber &&

{errors.licenseNumber}

} - - - - -
-
- -
- { setFormData({...formData, companyAddress: e.target.value}); setErrors({...errors, companyAddress: null}); }} - className={`w-full pr-12 pl-4 py-3 bg-white/5 border rounded-xl focus:outline-none focus:ring-2 focus:ring-amber-500 focus:border-transparent text-white placeholder-gray-500 transition-all ${errors.companyAddress ? 'border-red-500' : 'border-gray-700'}`} - placeholder="أدخل عنوان المكتب" /> -
- {errors.companyAddress &&

{errors.companyAddress}

} -
+ ) : (<>

اضغط لرفع صورة الرخصة

JPEG, PNG, JPG • حتى 5MB

)} +
)} @@ -1198,36 +487,6 @@ export default function OwnerRegisterPage() { {errors.back &&

{errors.back}

} - {isCompany && ( - - - - -
رفع صورة رخصة المكتب يساعد في تسريع عملية التحقق، لكنه غير مطلوب لإتمام التسجيل.
-
fileInputLicenseRef.current?.click()} - className={`relative border-2 border-dashed rounded-xl p-6 text-center cursor-pointer transition-all ${idImagePreviews.license ? 'border-green-500 bg-green-500/10' : 'border-gray-700 hover:border-amber-500 hover:bg-white/5'}`}> - handleImageUpload('license', e.target.files?.[0])} className="hidden" /> - {idImagePreviews.license ? ( -
- License - -
- ) : (<>

اضغط لرفع الصورة

JPEG, PNG, JPG • حتى 5MB

)} -
-
-
-
- )} - setFormData({...formData, agreeTerms: e.target.checked})} @@ -1239,7 +498,6 @@ export default function OwnerRegisterPage() { )} - {/* Buttons */} {step === 1 ? ( <> @@ -1264,7 +522,6 @@ export default function OwnerRegisterPage() { - {/* OTP Modal */} {showOtpModal && ( تم إرسال رمز التحقق إلى

{formData.email}

-
@@ -1292,14 +548,12 @@ export default function OwnerRegisterPage() { placeholder="------" />
-
-