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 (
{/* Header */}

{showCadastro ? "Criar Conta" : "Área do Paciente"}

{showCadastro ? "Preencha seus dados para criar sua conta" : "Faça login para acompanhar suas consultas"}

{/* Formulário */}
{!showCadastro ? ( /* Formulário de Login */
setFormData((prev) => ({ ...prev, email: e.target.value, })) } className="form-input pl-10 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-gray-100" placeholder="seu@email.com" required autoComplete="email" />
setFormData((prev) => ({ ...prev, senha: e.target.value, })) } className="form-input pl-10 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-gray-100" placeholder="Sua senha" required autoComplete="current-password" />
{/** Botão original (remoto) comentado a pedido **/} {/** **/}

Credenciais locais: {LOCAL_PATIENT.email} / {LOCAL_PATIENT.senha}

) : ( /* Formulário de Cadastro */
setCadastroData((prev) => ({ ...prev, nome: e.target.value, })) } className="form-input dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-gray-100" required autoComplete="name" />
setCadastroData((prev) => ({ ...prev, cpf: e.target.value, })) } className="form-input dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-gray-100" placeholder="000.000.000-00" required inputMode="numeric" pattern="^\d{3}\.\d{3}\.\d{3}-\d{2}$|^\d{11}$" />
setCadastroData((prev) => ({ ...prev, cep: e.target.value, })) } onBlur={() => buscarEnderecoPorCEP(cadastroData.cep)} className="form-input dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-gray-100" placeholder="00000-000" required inputMode="numeric" pattern="^\d{5}-?\d{3}$" autoComplete="postal-code" />
setCadastroData((prev) => ({ ...prev, logradouro: e.target.value, })) } className="form-input dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-gray-100" required autoComplete="address-line1" />
setCadastroData((prev) => ({ ...prev, bairro: e.target.value, })) } className="form-input dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-gray-100" required autoComplete="address-line2" />
setCadastroData((prev) => ({ ...prev, cidade: e.target.value, })) } className="form-input dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-gray-100" required autoComplete="address-level2" />
setCadastroData((prev) => ({ ...prev, estado: e.target.value, })) } className="form-input dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-gray-100" required autoComplete="address-level1" />
setCadastroData((prev) => ({ ...prev, email: e.target.value, })) } className="form-input dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-gray-100" required autoComplete="email" />
setCadastroData((prev) => ({ ...prev, senha: e.target.value, })) } className="form-input dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-gray-100" minLength={6} required autoComplete="new-password" />
setCadastroData((prev) => ({ ...prev, confirmarSenha: e.target.value, })) } className="form-input dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-gray-100" required autoComplete="new-password" aria-invalid={ cadastroData.confirmarSenha !== "" && cadastroData.confirmarSenha !== cadastroData.senha } aria-describedby={ cadastroData.confirmarSenha !== "" && cadastroData.confirmarSenha !== cadastroData.senha ? "cad_senha_help" : undefined } /> {cadastroData.confirmarSenha !== "" && cadastroData.confirmarSenha !== cadastroData.senha && (

As senhas não coincidem.

)}
setCadastroData((prev) => ({ ...prev, telefone: e.target.value, })) } className="form-input dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-gray-100" placeholder="(11) 99999-9999" required inputMode="numeric" pattern="^\(?\d{2}\)?\s?9?\d{4}-?\d{4}$" autoComplete="tel" />
setCadastroData((prev) => ({ ...prev, dataNascimento: e.target.value, })) } className="form-input dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-gray-100" required autoComplete="bday" />
setCadastroData((prev) => ({ ...prev, altura: e.target.value, })) } className="form-input dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-gray-100" placeholder="170" min="50" max="250" />
setCadastroData((prev) => ({ ...prev, peso: e.target.value, })) } className="form-input dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-gray-100" placeholder="70" min="20" max="300" step="0.1" />
)}
); }; export default LoginPaciente;