'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 (
{step === 1 ? 'أدخل معلوماتك الأساسية للتواصل' : 'يرجى رفع صور الهوية الشخصية للتحقق'}
{errors.name}
)}{errors.email}
)}{errors.phone}
)}{errors.whatsapp}
)}{errors.password}
)}{errors.confirmPassword}
)}اضغط لرفع الصورة
JPEG, PNG, JPG • حتى 5MB • 800x600 بكسل
> )}{errors.front}
)}اضغط لرفع الصورة
JPEG, PNG, JPG • حتى 5MB • 800x600 بكسل
> )}{errors.back}
)}