# 📄 Análise de Código: `LoginActivity.java` Esta classe (`app/src/main/java/com/example/medcuida/pro/ui/auth/LoginActivity.java`) gere toda a entrada do médico no sistema. ## 1. Importações e Declarações (Linhas 1 - 33) Importa elementos do Firebase (`FirebaseAuth`, `FirebaseUser`, `FirebaseFirestore`) e componentes da interface (`TextInputEditText`, `MaterialButton`). ## 2. Inicialização `onCreate()` (Linhas 34 - 79) * **Instâncias Firebase:** `mAuth` e `db` são inicializados. * **Proteção de Sessão:** Se `mAuth.getCurrentUser() != null`, significa que o utilizador já está logado. Ele nem sequer abre o ecrã; avança logo para a `MainActivity`. * **Ligações da Interface:** Mapeia botões (Login) e links (Registo, Recuperação de Pass) aos IDs do ficheiro XML. * **Botão Recuperar Password:** Se carregado, verifica se o campo do email não está vazio. Se estiver cheio, chama `mAuth.sendPasswordResetEmail(email)`. ## 3. Tentativa de Login `attemptLogin()` (Linhas 81 - 98) * Puxa o texto dos inputs `emailEditText` e `passwordEditText`. * Valida os campos: se um deles estiver vazio, dá erro (`setError`) e foca o campo. * Passa as credenciais para o `loginUser()`. ## 4. O Método `loginUser()` (Linhas 100 - 123) * **Experiência de Utilizador (UX):** Bloqueia o botão e muda o texto para "A entrar..." (assim evita que o médico clique duas vezes). * Faz a chamada ao Firebase: `mAuth.signInWithEmailAndPassword()`. * **Se Sucesso:** Pega no UID gerado e atira-o para o `checkUserAccess()`. * **Se Falha:** Mostra a mensagem de erro (Ex: "Password errada") e reativa o botão de login. ## 5. Validação de Papel (Role) `checkUserAccess()` (Linhas 125 - 153) Como a base de dados tem tanto pacientes como médicos, este método é crucial para garantir que um "paciente" não entra na app dos médicos por engano. 1. Tenta ler o documento do utilizador na coleção `"medicos"`. 2. Se existir, é um médico; vai para a `MainActivity`. 3. Se não existir, tenta ler na coleção `"utilizadores"`. Isto acontece porque em versões antigas/outras ramificações da app, os médicos também podem estar aí registados. 4. Se também não estiver aí, avisa "Esta conta não tem perfil configurado" e **faz sign out** imediatamente, forçando o ecrã a ficar no Login.