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!"); // Buscar dados do paciente da API const { listPatients } = await import("../services/pacienteService"); const pacientesResult = await listPatients({ search: formData.email }); 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; if (email !== LOCAL_PATIENT.email || senha !== LOCAL_PATIENT.senha) { toast.error( "Credenciais locais inválidas. Use o email e a senha indicados abaixo." ); return; } setLoading(true); try { 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"); } } catch (err) { console.error("[LoginPaciente] Erro no login local:", err); toast.error("Erro no login local"); } finally { setLoading(false); } }; return (
{showCadastro ? "Preencha seus dados para criar sua conta" : "Faça login para acompanhar suas consultas"}