import React, { useState } from 'react' import { useNavigate, Link } from 'react-router-dom' import { BookOpen, PenLine, ArrowLeft, Eye, EyeOff } from 'lucide-react' import logo from '../../assets/chapterX-removebg-preview.png' import { useAuthStore } from '../../store/authStore' import { useUIStore } from '../../store/uiStore' import { Button } from '../../components/ui/Button' type Role = 'regular' | 'writer' type Step = 1 | 2 export const RegisterPage: React.FC = () => { const navigate = useNavigate() const { register } = useAuthStore() const { addToast } = useUIStore() const [step, setStep] = useState(1) const [role, setRole] = useState('regular') const [loading, setLoading] = useState(false) const [showPw, setShowPw] = useState(false) const [form, setForm] = useState({ username: '', email: '', name: '', surname: '', password: '', confirmPassword: '', }) const [errors, setErrors] = useState>({}) const validate = () => { const e: Record = {} if (!form.username.trim()) e.username = 'Username is required' if (form.username.length < 3) e.username = 'Username must be at least 3 characters' if (!form.email.includes('@')) e.email = 'Enter a valid email address' if (!form.name.trim()) e.name = 'First name is required' if (!form.surname.trim()) e.surname = 'Last name is required' if (form.password.length < 6) e.password = 'Password must be at least 6 characters' if (form.password !== form.confirmPassword) e.confirmPassword = 'Passwords do not match' setErrors(e) return Object.keys(e).length === 0 } const handleSubmit = async (ev: React.FormEvent) => { ev.preventDefault() if (!validate()) return setLoading(true) try { await register( { username: form.username, email: form.email, name: form.name, surname: form.surname, password: form.password }, role ) addToast('Account created! Welcome to ChapterX.') navigate('/') } catch (err: any) { addToast(err.message || 'Registration failed', 'error') } finally { setLoading(false) } } const setField = (field: string, value: string) => { setForm(p => ({ ...p, [field]: value })) setErrors(p => ({ ...p, [field]: '' })) } return (
ChapterX

Create your account

Step {step} of 2

{/* Progress */}
{step === 1 ? (

I want to join as...

Already have an account?{' '} Sign in

) : (
setField('name', e.target.value)} placeholder="Elena" className={`w-full px-4 py-3 bg-slate-800 border rounded-xl text-white placeholder-slate-500 focus:outline-none focus:border-indigo-500 ${errors.name ? 'border-rose-500' : 'border-slate-700'}`} /> {errors.name &&

{errors.name}

}
setField('surname', e.target.value)} placeholder="Dimitrova" className={`w-full px-4 py-3 bg-slate-800 border rounded-xl text-white placeholder-slate-500 focus:outline-none focus:border-indigo-500 ${errors.surname ? 'border-rose-500' : 'border-slate-700'}`} /> {errors.surname &&

{errors.surname}

}
{[ { field: 'username', label: 'Username', placeholder: 'elena_writes', type: 'text' }, { field: 'email', label: 'Email', placeholder: 'you@example.com', type: 'email' }, ].map(f => (
setField(f.field, e.target.value)} placeholder={f.placeholder} className={`w-full px-4 py-3 bg-slate-800 border rounded-xl text-white placeholder-slate-500 focus:outline-none focus:border-indigo-500 ${(errors as any)[f.field] ? 'border-rose-500' : 'border-slate-700'}`} /> {(errors as any)[f.field] &&

{(errors as any)[f.field]}

}
))}
setField('password', e.target.value)} placeholder="Min. 6 characters" className={`w-full px-4 py-3 pr-12 bg-slate-800 border rounded-xl text-white placeholder-slate-500 focus:outline-none focus:border-indigo-500 ${errors.password ? 'border-rose-500' : 'border-slate-700'}`} />
{errors.password &&

{errors.password}

}
setField('confirmPassword', e.target.value)} placeholder="••••••••" className={`w-full px-4 py-3 bg-slate-800 border rounded-xl text-white placeholder-slate-500 focus:outline-none focus:border-indigo-500 ${errors.confirmPassword ? 'border-rose-500' : 'border-slate-700'}`} /> {errors.confirmPassword &&

{errors.confirmPassword}

}
)}
) }