import React, { useState } from 'react'; import { X, User, Lock, Phone, CheckCircle, ArrowRight, AlertCircle, RefreshCw, MessageSquare, Eye, EyeOff } from 'lucide-react'; import { Language } from '../types'; import { TRANSLATIONS } from '../constants/translations'; interface AuthModalProps { isVisible: boolean; onClose: () => void; language: Language; onLogin: (phone: string, password?: string) => void; onRegister: (phone: string, name: string, pass: string) => void; onResetPassword?: (phone: string, newPass: string) => Promise; } export const AuthModal: React.FC = ({ isVisible, onClose, language, onLogin, onRegister, onResetPassword }) => { const [mode, setMode] = useState<'login' | 'register' | 'reset'>('login'); const [formData, setFormData] = useState({ phone: '', name: '', password: '', confirmPassword: '', code: '' }); const [error, setError] = useState(null); const [successMsg, setSuccessMsg] = useState(null); const [isCodeSent, setIsCodeSent] = useState(false); const [showPassword, setShowPassword] = useState(false); const t = TRANSLATIONS[language]; if (!isVisible) return null; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(null); setSuccessMsg(null); if (mode === 'login') { onLogin(formData.phone, formData.password); } else if (mode === 'register') { // Registration Validation if (!formData.name.trim()) { setError("Name is required"); return; } if (formData.password.length < 6) { setError("Password must be at least 6 characters"); return; } if (formData.password !== formData.confirmPassword) { setError(t.authPassMismatch); return; } onRegister(formData.phone, formData.name, formData.password); setFormData({ phone: '', name: '', password: '', confirmPassword: '', code: '' }); onClose(); } else if (mode === 'reset') { // Reset Password Flow if (!isCodeSent) { // Simulate Sending Code if (formData.phone.length < 5) { setError("Please enter a valid phone number"); return; } setIsCodeSent(true); setSuccessMsg(`${t.authCodeSent} 8888`); // Simulation return; } // Verify Step if (formData.code !== '8888') { setError("Invalid verification code (Demo: 8888)"); return; } if (formData.password.length < 6) { setError("New password must be at least 6 characters"); return; } if (formData.password !== formData.confirmPassword) { setError(t.authPassMismatch); return; } if (onResetPassword) { const success = await onResetPassword(formData.phone, formData.password); if (success) { setSuccessMsg(t.authResetSuccess); setTimeout(() => { setMode('login'); setIsCodeSent(false); setSuccessMsg(null); setFormData({ ...formData, password: '', confirmPassword: '', code: '' }); }, 2000); } else { setError(t.authPhoneNotFound); } } } }; const toggleMode = (newMode: 'login' | 'register' | 'reset') => { setMode(newMode); setFormData({ phone: '', name: '', password: '', confirmPassword: '', code: '' }); // Clear form setError(null); setSuccessMsg(null); setIsCodeSent(false); setShowPassword(false); }; return (
{mode === 'login' ? : mode === 'register' ? : }

{mode === 'login' ? t.authLogin : mode === 'register' ? t.authRegister : t.authReset}

Romantic Life Studio

{error && (
{error}
)} {successMsg && (
{successMsg}
)}
{mode === 'register' && (
setFormData({...formData, name: e.target.value})} className="w-full pl-10 pr-4 py-2.5 rounded-lg border border-gray-200 focus:border-rose-500 outline-none bg-gray-50 focus:bg-white transition-all" />
)}
setFormData({...formData, phone: e.target.value})} className="w-full pl-10 pr-4 py-2.5 rounded-lg border border-gray-200 focus:border-rose-500 outline-none bg-gray-50 focus:bg-white transition-all disabled:bg-gray-100 disabled:text-gray-500" />
{mode === 'reset' && isCodeSent && (
setFormData({...formData, code: e.target.value})} className="w-full pl-10 pr-4 py-2.5 rounded-lg border border-gray-200 focus:border-rose-500 outline-none bg-gray-50 focus:bg-white transition-all" />
)} {/* Password Fields - Hidden for Reset step 1 */} {!(mode === 'reset' && !isCodeSent) && (
setFormData({...formData, password: e.target.value})} className="w-full pl-10 pr-10 py-2.5 rounded-lg border border-gray-200 focus:border-rose-500 outline-none bg-gray-50 focus:bg-white transition-all" />
)} {(mode === 'register' || (mode === 'reset' && isCodeSent)) && (
setFormData({...formData, confirmPassword: e.target.value})} className="w-full pl-10 pr-4 py-2.5 rounded-lg border border-gray-200 focus:border-rose-500 outline-none bg-gray-50 focus:bg-white transition-all" />
)}
{mode === 'login' && (
)}
); };