import React, { useState } from "react"; import { User, Mail, Lock } from "lucide-react"; import toast from "react-hot-toast"; import { useNavigate } from "react-router-dom"; import { useAuth } from "../hooks/useAuth"; const LoginPaciente: React.FC = () => { const [formData, setFormData] = useState({ email: "", senha: "", }); const [loading, setLoading] = useState(false); const [showCadastro, setShowCadastro] = useState(false); const [cadastroData, setCadastroData] = useState({ nome: "", email: "", senha: "", confirmarSenha: "", telefone: "", cpf: "", dataNascimento: "", convenio: "", altura: "", peso: "", cep: "", logradouro: "", bairro: "", cidade: "", estado: "", }); // Função para buscar endereço pelo CEP const buscarEnderecoPorCEP = async (cep: string) => { if (!cep || cep.replace(/\D/g, "").length < 8) return; try { const response = await fetch( `https://viacep.com.br/ws/${cep.replace(/\D/g, "")}/json/` ); const data = await response.json(); if (data.erro) { toast.error("CEP não encontrado"); return; } setCadastroData((prev) => ({ ...prev, logradouro: data.logradouro || "", bairro: data.bairro || "", cidade: data.localidade || "", estado: data.uf || "", })); } catch { toast.error("Erro ao buscar CEP"); } }; const navigate = useNavigate(); const { loginPaciente } = useAuth(); // Credenciais fixas para LOGIN LOCAL de paciente const LOCAL_PATIENT = { email: "pedro.araujo@mediconnect.com", senha: "local123", nome: "Pedro Araujo", id: "pedro.araujo@mediconnect.com", } as const; const handleLogin = async (e: React.FormEvent) => { e.preventDefault(); setLoading(true); try { console.log("[LoginPaciente] Fazendo login com email:", formData.email); // Fazer login via API Supabase const authService = (await import("../services/authService")).default; const loginResult = await authService.login({ email: formData.email, password: formData.senha, }); if (!loginResult.success) { console.log("[LoginPaciente] Erro no login:", loginResult.error); toast.error(loginResult.error || "Email ou senha incorretos"); setLoading(false); return; } console.log("[LoginPaciente] Login bem-sucedido!", loginResult.data); // Verificar se o token foi salvo const tokenStore = (await import("../services/tokenStore")).default; const token = tokenStore.getAccessToken(); const refreshToken = tokenStore.getRefreshToken(); console.log("[LoginPaciente] Token salvo:", token ? "SIM" : "NÃO"); console.log( "[LoginPaciente] Refresh token salvo:", refreshToken ? "SIM" : "NÃO" ); if (!token) { console.error( "[LoginPaciente] Token não foi salvo! Dados do login:", loginResult.data ); toast.error("Erro ao salvar credenciais de autenticação"); setLoading(false); return; } // Buscar dados do paciente da API const { listPatients } = await import("../services/pacienteService"); const pacientesResult = await listPatients({ search: formData.email }); console.log( "[LoginPaciente] Resultado da busca de pacientes:", pacientesResult ); const paciente = pacientesResult.data?.[0]; if (paciente) { console.log("[LoginPaciente] Paciente encontrado:", { id: paciente.id, nome: paciente.nome, email: paciente.email, }); const ok = await loginPaciente({ id: paciente.id, nome: paciente.nome, email: paciente.email, }); if (ok) { console.log("[LoginPaciente] Navegando para /acompanhamento"); navigate("/acompanhamento"); } else { console.error("[LoginPaciente] loginPaciente retornou false"); toast.error("Erro ao processar login"); } } else { console.log("[LoginPaciente] Paciente não encontrado na lista"); toast.error( "Dados do paciente não encontrados. Entre em contato com o suporte." ); } } catch (error) { console.error("[LoginPaciente] Erro no login:", error); toast.error("Erro ao fazer login. Tente novamente."); } finally { setLoading(false); } }; const handleCadastro = async (e: React.FormEvent) => { e.preventDefault(); // Redirecionar para a página de cadastro dedicada navigate("/cadastro-paciente"); }; // Login LOCAL: cria uma sessão de paciente sem chamar a API const handleLoginLocal = async () => { const email = formData.email.trim(); const senha = formData.senha; console.log("[LoginPaciente] Login local - tentando com API primeiro"); // Tentar fazer login via API mesmo no modo "local" setLoading(true); try { // Fazer login via API Supabase const authService = (await import("../services/authService")).default; const loginResult = await authService.login({ email: email, password: senha, }); if (!loginResult.success) { console.log( "[LoginPaciente] Login via API falhou, usando modo local sem token" ); console.log("[LoginPaciente] Erro:", loginResult.error); // Fallback: validar credenciais locais hardcoded if (email !== LOCAL_PATIENT.email || senha !== LOCAL_PATIENT.senha) { toast.error("Credenciais inválidas"); setLoading(false); return; } // Login local SEM token (modo de desenvolvimento) toast( "⚠️ Modo local ativo: algumas funcionalidades podem não funcionar sem API", { icon: "⚠️", duration: 5000, } ); const ok = await loginPaciente({ id: LOCAL_PATIENT.id, nome: LOCAL_PATIENT.nome, email: LOCAL_PATIENT.email, }); if (ok) { navigate("/acompanhamento"); } else { toast.error("Não foi possível iniciar a sessão local"); } setLoading(false); return; } console.log("[LoginPaciente] Login via API bem-sucedido!"); // Verificar se o token foi salvo const tokenStore = (await import("../services/tokenStore")).default; const token = tokenStore.getAccessToken(); console.log("[LoginPaciente] Token salvo:", token ? "SIM" : "NÃO"); // Buscar dados do paciente da API const { listPatients } = await import("../services/pacienteService"); const pacientesResult = await listPatients({ search: email }); const paciente = pacientesResult.data?.[0]; if (paciente) { console.log( "[LoginPaciente] Paciente encontrado na API:", paciente.nome ); const ok = await loginPaciente({ id: paciente.id, nome: paciente.nome, email: paciente.email, }); if (ok) { navigate("/acompanhamento"); } else { toast.error("Erro ao processar login"); } } else { console.log( "[LoginPaciente] Paciente não encontrado na API, usando dados locais" ); const ok = await loginPaciente({ id: email, nome: email.split("@")[0], email: email, }); if (ok) { navigate("/acompanhamento"); } else { toast.error("Erro ao processar login"); } } } catch (err) { console.error("[LoginPaciente] Erro no login:", err); toast.error("Erro ao fazer login"); } finally { setLoading(false); } }; return (
{showCadastro ? "Preencha seus dados para criar sua conta" : "Faça login para acompanhar suas consultas"}