'use client' import { useState } from 'react' export type AuthMode = 'login' | 'register' | 'forgot-password' export interface AuthFormProps { mode: AuthMode onSubmit: (data: AuthFormData) => void | Promise isLoading?: boolean error?: string onModeChange?: (mode: AuthMode) => void } export interface AuthFormData { email: string password?: string username?: string confirmPassword?: string } export function AuthForm({ mode, onSubmit, isLoading = false, error, onModeChange }: AuthFormProps) { const [formData, setFormData] = useState({ email: '', password: '', username: '', confirmPassword: '' }) const handleSubmit = (e: React.FormEvent) => { e.preventDefault() onSubmit(formData) } const titles = { login: 'Welcome back', register: 'Create your account', 'forgot-password': 'Reset your password' } const buttonTexts = { login: 'Sign in', register: 'Create account', 'forgot-password': 'Send reset link' } return (
{/* Logo/Title */}

{titles[mode]}

{/* Error Message */} {error && (
{error}
)} {/* Form */}
{/* Username (Register only) */} {mode === 'register' && (
setFormData({ ...formData, username: e.target.value })} className="w-full px-4 py-3 bg-zinc-800 border border-zinc-700 rounded-lg text-white placeholder-zinc-500 focus:outline-none focus:ring-2 focus:ring-purple-500" placeholder="Choose a username" required />
)} {/* Email */}
setFormData({ ...formData, email: e.target.value })} className="w-full px-4 py-3 bg-zinc-800 border border-zinc-700 rounded-lg text-white placeholder-zinc-500 focus:outline-none focus:ring-2 focus:ring-purple-500" placeholder="your@email.com" required />
{/* Password (not in forgot-password) */} {mode !== 'forgot-password' && (
setFormData({ ...formData, password: e.target.value })} className="w-full px-4 py-3 bg-zinc-800 border border-zinc-700 rounded-lg text-white placeholder-zinc-500 focus:outline-none focus:ring-2 focus:ring-purple-500" placeholder="••••••••" required />
)} {/* Confirm Password (Register only) */} {mode === 'register' && (
setFormData({ ...formData, confirmPassword: e.target.value })} className="w-full px-4 py-3 bg-zinc-800 border border-zinc-700 rounded-lg text-white placeholder-zinc-500 focus:outline-none focus:ring-2 focus:ring-purple-500" placeholder="••••••••" required />
)} {/* Forgot Password Link (Login only) */} {mode === 'login' && onModeChange && (
)} {/* Submit Button */}
{/* Mode Switch Links */} {onModeChange && (
{mode === 'login' && (

Don't have an account?{' '}

)} {mode === 'register' && (

Already have an account?{' '}

)} {mode === 'forgot-password' && (

Remember your password?{' '}

)}
)}
) }