import { useState, useEffect } from 'react' import { useForm } from 'react-hook-form' import { z } from 'zod' import { zodResolver } from '@hookform/resolvers/zod' import { useAuth } from '../context/AuthContext' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Card } from '@/components/ui/card' import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from '@/components/ui/form' import { useToast } from '@/hooks/use-toast' import { checkFirstUser } from '../api/client' const formSchema = z.object({ email: z.string().email('Invalid email address'), password: z.string().min(6, 'Password must be at least 6 characters long'), adminToken: z.string().optional(), }) type FormValues = z.infer export function AuthForms() { const [isFirstUser, setIsFirstUser] = useState(null) const { login, register } = useAuth() const { toast } = useToast() const form = useForm({ resolver: zodResolver(formSchema), defaultValues: { email: '', password: '', adminToken: '', }, }) useEffect(() => { const init = async () => { try { const isFirst = await checkFirstUser() setIsFirstUser(isFirst) } catch (err) { console.error('Error checking first user:', err) setIsFirstUser(false) } } init() }, []) const onSubmit = async (values: FormValues) => { try { if (isFirstUser) { await register(values.email, values.password, values.adminToken || '') } else { await login(values.email, values.password) } form.reset() } catch (err: any) { toast({ variant: 'destructive', title: 'Error', description: err.response?.data || 'An error occurred', }) } } if (isFirstUser === null) { return
Loading...
} return (

{isFirstUser ? 'Create Admin Account' : 'Login'}

{isFirstUser ? 'Set up your admin account to get started' : 'Welcome back! Please login to your account'}

( Email )} /> ( Password )} /> {isFirstUser && ( ( Admin Setup Token )} /> )}
) }