import { useState, type FormEvent } from 'react' import { Link, useNavigate, useSearchParams } from 'react-router-dom' import { Card, CardHeader, CardContent, CardFooter, Button, Input, Chip, ChipLabel, Alert, AlertTitle, AlertDescription, } from '@heroui/react' import { Mail, Lock, User, ArrowRight, Eye, EyeOff, ArrowLeft, ShieldCheck, } from 'lucide-react' import { useAuth } from '../contexts/AuthContext' export const AuthPage = () => { const [searchParams, setSearchParams] = useSearchParams() const initialMode = searchParams.get('mode') === 'register' ? 'register' : 'login' const initialEmail = searchParams.get('email') || '' const [mode, setMode] = useState<'login' | 'register'>(initialMode) // Form states const [name, setName] = useState('') const [email, setEmail] = useState(initialEmail) const [password, setPassword] = useState('') const [confirmPassword, setConfirmPassword] = useState('') const [showPassword, setShowPassword] = useState(false) // Status & UI const [isLoading, setIsLoading] = useState(false) const [errorMessage, setErrorMessage] = useState(null) const [successMessage, setSuccessMessage] = useState(null) const { login, register } = useAuth() const navigate = useNavigate() const switchMode = (newMode: 'login' | 'register') => { setMode(newMode) setSearchParams({ mode: newMode }) setErrorMessage(null) setSuccessMessage(null) } const handleLogin = async (e: FormEvent) => { e.preventDefault() setErrorMessage(null) setIsLoading(true) try { const response = await login(email, password) if (!response.organizations || response.organizations.length === 0) { navigate('/organizations') } else { navigate('/dashboard') } } catch (err: unknown) { const msg = err instanceof Error ? err.message : 'Erro ao realizar login. Verifique suas credenciais.' setErrorMessage(msg) } finally { setIsLoading(false) } } const handleRegister = async (e: FormEvent) => { e.preventDefault() setErrorMessage(null) if (password.length < 6) { setErrorMessage('A senha deve conter no mínimo 6 caracteres.') return } if (password !== confirmPassword) { setErrorMessage('As senhas digitadas não coincidem.') return } setIsLoading(true) try { await register(name, email, password) setSuccessMessage('Conta criada com sucesso! Faça login para acessar seu workspace.') setMode('login') setSearchParams({ mode: 'login' }) setPassword('') setConfirmPassword('') } catch (err: unknown) { const msg = err instanceof Error ? err.message : 'Erro ao criar conta. Tente novamente.' setErrorMessage(msg) } finally { setIsLoading(false) } } return (
{/* Decorative ambient gradients */}
{/* Top back navigation */}
Voltar para a página inicial v3.0
{/* Main Auth Card */} {/* Card Header & Brand */}
🐝

BeeTask

{mode === 'login' ? 'Acesse seu painel com segurança e foco' : 'Crie seu workspace corporativo em segundos'}

{/* Mode Switcher Tabs */}
{/* Feedback Alerts */} {errorMessage && (
Atenção {errorMessage}
)} {successMessage && (
Sucesso {successMessage}
)} {/* Mode Form */} {mode === 'login' ? (
setEmail(e.target.value)} placeholder="seu.email@empresa.com" className="w-full pl-10 pr-4 py-2.5 bg-surface-muted/60 border border-border-soft rounded-xl text-sm text-text-main placeholder-text-muted/60 focus:outline-none focus:ring-2 focus:ring-brand/20 focus:border-brand transition-all" />
setPassword(e.target.value)} placeholder="••••••••" className="w-full pl-10 pr-10 py-2.5 bg-surface-muted/60 border border-border-soft rounded-xl text-sm text-text-main placeholder-text-muted/60 focus:outline-none focus:ring-2 focus:ring-brand/20 focus:border-brand transition-all font-mono" />
) : (
setName(e.target.value)} placeholder="Ex: Carlos Oliveira" className="w-full pl-10 pr-4 py-2.5 bg-surface-muted/60 border border-border-soft rounded-xl text-sm text-text-main placeholder-text-muted/60 focus:outline-none focus:ring-2 focus:ring-brand/20 focus:border-brand transition-all" />
setEmail(e.target.value)} placeholder="seu.email@empresa.com" className="w-full pl-10 pr-4 py-2.5 bg-surface-muted/60 border border-border-soft rounded-xl text-sm text-text-main placeholder-text-muted/60 focus:outline-none focus:ring-2 focus:ring-brand/20 focus:border-brand transition-all" />
setPassword(e.target.value)} placeholder="Mínimo 6 dígitos" className="w-full pl-10 pr-10 py-2.5 bg-surface-muted/60 border border-border-soft rounded-xl text-sm text-text-main placeholder-text-muted/60 focus:outline-none focus:ring-2 focus:ring-brand/20 focus:border-brand transition-all font-mono" />
setConfirmPassword(e.target.value)} placeholder="Repita a senha" className="w-full pl-10 pr-4 py-2.5 bg-surface-muted/60 border border-border-soft rounded-xl text-sm text-text-main placeholder-text-muted/60 focus:outline-none focus:ring-2 focus:ring-brand/20 focus:border-brand transition-all font-mono" />
)}
{/* Footer Links & Info */}

{mode === 'login' ? ( <> Ainda não tem conta no Bee Task?{' '} ) : ( <> Já possui uma conta ativa?{' '} )}

Autenticação segura com JWT Quarkus & MinIO S3
) }