import React, { useState } from 'react'; import { Link, useNavigate } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import { useAuth } from '../context/AuthContext'; import Footer from '../components/Footer'; import api from '../services/api'; import logo from '../assets/logo-white.png'; const Login = () => { const { t } = useTranslation(); const navigate = useNavigate(); const { login } = useAuth(); const [formData, setFormData] = useState({ email: '', password: '', }); const [errors, setErrors] = useState({}); const [loading, setLoading] = useState(false); const [needsActivation, setNeedsActivation] = useState(false); const [resendingEmail, setResendingEmail] = useState(false); const [resendSuccess, setResendSuccess] = useState(false); const handleChange = (e) => { setFormData({ ...formData, [e.target.name]: e.target.value, }); // Limpiar error del campo cuando el usuario escribe if (errors[e.target.name]) { setErrors({ ...errors, [e.target.name]: null }); } // Reset activation state when email changes if (e.target.name === 'email') { setNeedsActivation(false); setResendSuccess(false); } }; const handleSubmit = async (e) => { e.preventDefault(); setLoading(true); setErrors({}); setNeedsActivation(false); setResendSuccess(false); try { const response = await login(formData); if (response.success) { navigate('/dashboard'); } } catch (error) { const errorData = error.response?.data; // Check if it's an activation error if (errorData?.error === 'email_not_verified') { setNeedsActivation(true); setErrors({ general: errorData.message }); } else if (errorData?.error === 'no_subscription') { setErrors({ general: t('login.noSubscription', 'Você não possui uma assinatura ativa. Por favor, complete o pagamento.') }); } else if (errorData?.errors) { setErrors(errorData.errors); } else if (errorData?.message) { setErrors({ general: errorData.message }); } else { setErrors({ general: t('errors.connection', 'Erro de conexão. Tente novamente.') }); } } finally { setLoading(false); } }; const handleResendActivation = async () => { setResendingEmail(true); setResendSuccess(false); try { const response = await api.post('/resend-activation', { email: formData.email }); if (response.data.success) { setResendSuccess(true); } } catch (error) { const message = error.response?.data?.message || t('errors.resendFailed', 'Erro ao reenviar email'); setErrors({ general: message }); } finally { setResendingEmail(false); } }; return (
{t('landing.hero.subtitle', 'Gestión Financiera Inteligente')}
{t('login.noAccount', '¿No tienes cuenta?')}{' '} {t('login.createAccount', 'Crea una aquí')}