import { useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import { useAuth } from '@/hooks/useAuth'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { toast } from '@/hooks/use-toast'; import { z } from 'zod'; const emailSchema = z.string().email('Invalid email address'); const passwordSchema = z.string().min(6, 'Password must be at least 6 characters'); export default function Auth() { const [isLogin, setIsLogin] = useState(true); const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [name, setName] = useState(''); const [loading, setLoading] = useState(false); const { signIn, signUp, user } = useAuth(); const navigate = useNavigate(); useEffect(() => { if (user) { navigate('/dashboard'); } }, [user, navigate]); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); try { emailSchema.parse(email); passwordSchema.parse(password); } catch (err) { if (err instanceof z.ZodError) { toast({ title: 'Validation Error', description: err.errors[0].message, variant: 'destructive' }); return; } } setLoading(true); if (isLogin) { const { error } = await signIn(email, password); if (error) { toast({ title: 'Error', description: error.message, variant: 'destructive' }); } else { navigate('/dashboard'); } } else { if (!name.trim()) { toast({ title: 'Error', description: 'Name is required', variant: 'destructive' }); setLoading(false); return; } const { error } = await signUp(email, password, name); if (error) { if (error.message.includes('already registered')) { toast({ title: 'Error', description: 'This email is already registered. Please login instead.', variant: 'destructive' }); } else { toast({ title: 'Error', description: error.message, variant: 'destructive' }); } } else { toast({ title: 'Success', description: 'Check your email to confirm your account' }); } } setLoading(false); }; return (