'use client'; import { useState, useRef, useEffect } 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, Upload, X, CheckCircle, XCircle, AlertCircle, ArrowLeft, Building, Loader2, Home } from 'lucide-react'; import toast, { Toaster } from 'react-hot-toast'; export default function OwnerRegisterPage() { const router = useRouter(); const [step, setStep] = useState(1); const [showPassword, setShowPassword] = useState(false); const [showConfirmPassword, setShowConfirmPassword] = useState(false); const [isLoading, setIsLoading] = useState(false); const [formData, setFormData] = useState({ name: '', email: '', phone: '', whatsapp: '', password: '', confirmPassword: '', agreeTerms: false }); const [idImages, setIdImages] = useState({ front: null, back: null }); const [idImagePreviews, setIdImagePreviews] = useState({ front: '', back: '' }); 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 })); toast.success(`تم رفع الصورة بنجاح`, { style: { background: '#dcfce7', color: '#166534' } }); }; const validateEmail = (email) => { const re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; return re.test(email); }; const validatePhone = (phone) => { const re = /^(09|05)[0-9]{8}$/; return re.test(phone); }; const validateStep1 = () => { const newErrors = {}; if (!formData.name) { newErrors.name = 'الاسم الكامل مطلوب'; } else if (formData.name.length < 3) { newErrors.name = 'الاسم يجب أن يكون 3 أحرف على الأقل'; } 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()) { setStep(2); window.scrollTo({ top: 0, behavior: 'smooth' }); } else { toast.error('يرجى تصحيح الأخطاء في النموذج'); } }; const handleSubmit = async (e) => { e.preventDefault(); if (!validateStep2()) { toast.error('يرجى إكمال جميع الصور المطلوبة'); return; } if (!formData.agreeTerms) { toast.error('يجب الموافقة على الشروط والأحكام'); return; } setIsLoading(true); setTimeout(() => { setIsLoading(false); toast.success('تم إنشاء الحساب بنجاح!', { style: { background: '#dcfce7', color: '#166534' }, duration: 3000 }); localStorage.setItem('user', JSON.stringify({ name: formData.name, email: formData.email, role: 'owner', avatar: formData.name.charAt(0).toUpperCase() })); setTimeout(() => { router.push('/'); }, 1500); }, 2000); }; const fadeInUp = { initial: { opacity: 0, y: 20 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.5 } }; const staggerContainer = { animate: { transition: { staggerChildren: 0.1 } } }; return (
{[...Array(20)].map((_, i) => ( ))}
العودة
خطوة {step} من 2
= 1 ? 'bg-amber-500' : 'bg-gray-700' }`} animate={{ scaleX: step >= 1 ? 1 : 0.5 }} /> = 2 ? 'bg-amber-500' : 'bg-gray-700' }`} animate={{ scaleX: step >= 2 ? 1 : 0.5 }} />

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

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

{step === 1 ? ( <>
{ setFormData({...formData, name: e.target.value}); setErrors({...errors, name: 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.name ? 'border-red-500' : 'border-gray-700' }`} placeholder="أدخل اسمك الكامل" />
{errors.name && (

{errors.name}

)}
{ 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, 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}

)}
) : ( <>
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 • 800x600 بكسل

)}
{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 • 800x600 بكسل

)}
{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 focus:ring-offset-0" required /> )} {step === 1 ? ( <> ) : ( <> )}
); }