# Guia Completo da Aplicação - Cuida+

Este documento fornece uma visão geral técnica e funcional de toda a aplicação Cuida+.

## 1. Visão Geral
A **Cuida+** é uma aplicação móvel Android desenvolvida em Java, focada na gestão de saúde pessoal. Permite aos utilizadores gerir as suas medicações, agendar consultas médicas e realizar uma triagem preliminar baseada em Inteligência Artificial.

## 2. Tecnologias Utilizadas
- **Linguagem:** Java (Android SDK).
- **Base de Dados & Auth:** Firebase (Authentication, Firestore, Realtime Database).
- **Inteligência Artificial:** Google Gemini API (para o chat de triagem).
- **Notificações:** AlarmManager para lembretes de medicação.

## 3. Arquitetura de Pastas e Módulos

### 🔵 Autenticação (`ui/auth`)
- **Login/Registo:** Gerido pelo Firebase Auth.
- **Recuperação de Password:** Envio de emails automáticos para redefinição.
- **Ficheiros:** `LoginActivity`, `RegisterActivity`, `ForgotPasswordActivity`.

### 🟢 Gestão de Medicação (`ui/medication`)
- **Funcionalidades:** Adicionar, editar e eliminar medicamentos.
- **Destaque:** Suporte para múltiplos horários por medicamento com alarmes independentes.
- **Integração:** Pesquisa em tempo real de nomes de medicamentos no Firebase (Realtime DB).
- **Ficheiros:** `MedicationFragment`, `MedicationDialog`, `MedicationViewModel`.

### 📅 Agenda e Consultas (`ui/appointments` & `ui/schedule`)
- **Visualização:** Lista de consultas futuras e passadas.
- **Agendamento:** Escolha de data e slots de tempo disponíveis para marcar com médicos registados no sistema.
- **Ficheiros:** `AppointmentsFragment`, `ScheduleAppointmentFragment`.

### 🤖 Triagem IA - SNS24 (`ui/sns24`)
- **Funcionalidade:** Um chat inteligente onde o utilizador descreve sintomas.
- **Lógica:** Usa a classe `Gemini.java` para processar a linguagem natural e sugerir o nível de urgência (triagem).
- **Botão de Emergência:** Se o sistema detetar gravidade, oferece a opção de localizar o hospital mais próximo.

### ⚙️ Utilitários e Segundo Plano (`utils` & `services`)
- **`AlarmScheduler`:** Centraliza a lógica de agendamento de alarmes no sistema Android.
- **`AlarmReceiver`:** Ouve os eventos do sistema e dispara notificações sonoras e visuais.
- **`NotificationHelper`:** Gera as notificações push que aparecem no telemóvel.

## 4. Modelos de Dados (`data/model`)
- **`User` / `Perfil`:** Informação básica do utilizador (nome, foto, contacto).
- **`Medication`:** Nome, horários (comma-separated), dosagem, notas e estado.
- **`Appointment`:** Médico, data, hora e notas da consulta.

## 5. Fluxo de Dados
1. O utilizador interage com o **Fragment** (Interface).
2. O **ViewModel** processa os dados e comunica com o **Firebase Firestore**.
3. O Firestore atualiza os dados na nuvem em tempo real (SnapshotListeners).
4. O **ViewModel** recebe a atualização e reflete as mudanças na UI automaticamente através de **LiveData**.

---
*Este guia serve como referência para novos programadores ou para auditoria do projeto.*
