'use client' import { useState } from 'react' import { Dialog, DialogContent, DialogTitle, TextField, Button, Box, Typography, Alert, IconButton, Tabs, Tab, InputAdornment, CircularProgress } from '@mui/material' import { Close, Visibility, VisibilityOff } from '@mui/icons-material' import { useTranslations } from 'next-intl' import { useAuth } from '@/hooks/use-auth' interface AuthModalProps { open: boolean onClose: () => void onSuccess?: () => void defaultTab?: 'login' | 'register' title?: string message?: string } export function AuthModal({ open, onClose, onSuccess, defaultTab = 'login', title, message }: AuthModalProps) { const t = useTranslations('auth') const { login, register } = useAuth() const [tab, setTab] = useState<'login' | 'register'>(defaultTab) const [showPassword, setShowPassword] = useState(false) const [loading, setLoading] = useState(false) const [error, setError] = useState(null) // Login form state const [loginData, setLoginData] = useState({ email: '', password: '' }) // Register form state const [registerData, setRegisterData] = useState({ name: '', email: '', password: '', confirmPassword: '' }) const handleTabChange = (event: React.SyntheticEvent, newValue: 'login' | 'register') => { setTab(newValue) setError(null) } const handleLoginSubmit = async (e: React.FormEvent) => { e.preventDefault() setError(null) setLoading(true) try { const success = await login(loginData.email, loginData.password) if (success) { // Clear form setLoginData({ email: '', password: '' }) // Call success callback onSuccess?.() // Close modal onClose() } else { setError(t('loginError')) } } catch (err: any) { setError(err.message || t('connectionError')) } finally { setLoading(false) } } const handleRegisterSubmit = async (e: React.FormEvent) => { e.preventDefault() setError(null) // Validate passwords match if (registerData.password !== registerData.confirmPassword) { setError(t('passwordMismatch')) return } setLoading(true) try { const success = await register( registerData.email, registerData.password, registerData.name || undefined ) if (success) { // Clear form setRegisterData({ name: '', email: '', password: '', confirmPassword: '' }) // Call success callback onSuccess?.() // Close modal onClose() } else { setError(t('registerError')) } } catch (err: any) { setError(err.message || t('connectionError')) } finally { setLoading(false) } } const handleClose = () => { if (!loading) { setError(null) onClose() } } return ( {title || (tab === 'login' ? t('welcomeBack') : t('joinUs'))} {message && ( {message} )} {error && ( {error} )} {tab === 'login' ? ( setLoginData(prev => ({ ...prev, email: e.target.value }))} required disabled={loading} sx={{ mb: 2 }} autoComplete="email" /> setLoginData(prev => ({ ...prev, password: e.target.value }))} required disabled={loading} sx={{ mb: 3 }} autoComplete="current-password" InputProps={{ endAdornment: ( setShowPassword(!showPassword)} edge="end" disabled={loading} > {showPassword ? : } ) }} /> {t('noAccount')}{' '} ) : ( setRegisterData(prev => ({ ...prev, name: e.target.value }))} disabled={loading} sx={{ mb: 2 }} autoComplete="name" /> setRegisterData(prev => ({ ...prev, email: e.target.value }))} required disabled={loading} sx={{ mb: 2 }} autoComplete="email" /> setRegisterData(prev => ({ ...prev, password: e.target.value }))} required disabled={loading} sx={{ mb: 2 }} autoComplete="new-password" InputProps={{ endAdornment: ( setShowPassword(!showPassword)} edge="end" disabled={loading} > {showPassword ? : } ) }} /> setRegisterData(prev => ({ ...prev, confirmPassword: e.target.value }))} required disabled={loading} sx={{ mb: 3 }} autoComplete="new-password" error={registerData.confirmPassword !== '' && registerData.password !== registerData.confirmPassword} helperText={ registerData.confirmPassword !== '' && registerData.password !== registerData.confirmPassword ? t('passwordMismatch') : '' } /> {t('alreadyHaveAccount')}{' '} )} ) }