import React, { useState } from 'react' import { useNavigate, Link } from 'react-router-dom' import { 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' export const LoginPage: React.FC = () => { const navigate = useNavigate() const { login } = useAuthStore() const { addToast } = useUIStore() const [email, setEmail] = useState('') const [password, setPassword] = useState('') const [showPw, setShowPw] = useState(false) const [loading, setLoading] = useState(false) const [errors, setErrors] = useState<{ email?: string; password?: string }>({}) const [noAccount, setNoAccount] = useState(false) const validate = () => { const e: typeof errors = {} if (!email.trim()) e.email = 'Email is required' if (!password.trim()) e.password = 'Password is required' setErrors(e) return Object.keys(e).length === 0 } const handleSubmit = async (ev: React.FormEvent) => { ev.preventDefault() if (!validate()) return setNoAccount(false) setLoading(true) try { await login(email, password) addToast('Welcome back!') navigate('/') } catch (err: any) { const message = err?.message || 'Incorrect email or password. Please try again.' if (/no account found/i.test(message)) { setNoAccount(true) setErrors(p => ({ ...p, email: message })) } else { setErrors(p => ({ ...p, password: message })) } addToast(message, 'error') } finally { setLoading(false) } } return (
{/* Logo */}
ChapterX

Welcome back

Sign in to your account

{/* Form */}
{ setEmail(e.target.value); setErrors(p => ({ ...p, email: '' })); setNoAccount(false) }} placeholder="you@example.com" 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 transition-colors ${ errors.email ? 'border-rose-500' : 'border-slate-700' }`} /> {errors.email &&

{errors.email}

}
{ setPassword(e.target.value); setErrors(p => ({ ...p, password: '' })) }} placeholder="••••••••" 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 transition-colors ${ errors.password ? 'border-rose-500' : 'border-slate-700' }`} />
{errors.password &&

{errors.password}

}

Don't have an account?{' '} Create one

) }