import React, { useState } from 'react'; import { SchoolData, User } from '../types'; import { BookOpen, User as UserIcon, Lock, ArrowRight, Loader2, Shield } from 'lucide-react'; interface AuthProps { data: SchoolData; onLogin: (user: User) => void; onUpdateUsers: (newUsers: User[]) => void; } const Auth: React.FC = ({ data, onLogin, onUpdateUsers }) => { const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(''); const [success, setSuccess] = useState(''); const [isRecovering, setIsRecovering] = useState(false); const [formData, setFormData] = useState({ name: '', displayName: '', password: '', newPassword: '', cpf: '' }); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(''); setSuccess(''); setIsLoading(true); // Simulate network delay for better UX await new Promise(resolve => setTimeout(resolve, 800)); // Normalize inputs const loginName = (formData.name || '').trim().toLowerCase(); const loginPass = formData.password.trim(); const loginCpf = formData.cpf.replace(/\D/g, ''); // Ensure data.users exists before finding const usersList = data.users || []; if (isRecovering) { const userIndex = usersList.findIndex(u => (u.name || '').toLowerCase() === loginName); const user = usersList[userIndex]; if (user) { const storedCpf = (user.cpf || '').replace(/\D/g, ''); if (!loginCpf) { setError('O CPF é obrigatório para recuperação.'); } else if (storedCpf && storedCpf !== loginCpf) { setError('CPF incorreto para este usuário.'); } else if (!storedCpf) { setError('Este usuário não possui CPF cadastrado. Entre em contato com o suporte.'); } else if (!formData.newPassword) { setError('Digite a nova senha.'); } else if (!formData.displayName) { setError('O Nome Completo é obrigatório.'); } else { const updatedUsers = [...usersList]; updatedUsers[userIndex] = { ...updatedUsers[userIndex], password: formData.newPassword.trim(), displayName: formData.displayName.trim() }; onUpdateUsers(updatedUsers); setSuccess('Dados atualizados com sucesso! Faça login.'); setIsRecovering(false); setFormData({ name: '', displayName: '', password: '', newPassword: '', cpf: '' }); } } else { setError('Usuário não encontrado.'); } } else { // Login Logic const user = usersList.find(u => (u.name || '').toLowerCase() === loginName && u.password === loginPass ); if (user) { onLogin(user); } else { setError('Usuário ou senha inválidos.'); } } setIsLoading(false); }; const inputClass = "w-full pl-10 pr-4 py-3 bg-slate-50 text-slate-900 border border-slate-200 rounded-xl focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:border-transparent transition-all font-medium text-sm"; return (
{data.logo ? ( Logo ) : (
)}

{isRecovering ? 'Recuperar Senha' : 'Acesso Restrito'}

{isRecovering ? 'Crie uma nova senha para o seu usuário.' : 'Insira suas credenciais para acessar o EduManager.'}

setFormData({...formData, name: e.target.value})} />
{isRecovering && ( <>
setFormData({...formData, displayName: e.target.value})} />
{ const val = e.target.value.replace(/\D/g, '').replace(/(\d{3})(\d)/, '$1.$2').replace(/(\d{3})(\d)/, '$1.$2').replace(/(\d{3})(\d{1,2})/, '$1-$2').slice(0, 14); setFormData({...formData, cpf: val}); }} />
)} {!isRecovering ? (
setFormData({...formData, password: e.target.value})} />
) : (
setFormData({...formData, newPassword: e.target.value})} />
)} {error && (
{error}
)} {success && (
{success}
)}

Acesso Padrão: admin / admin

); }; export default Auth;