# Sistema de Mensagens - MediConnect

## Configuração do Supabase

Para habilitar o sistema de mensagens entre médicos e pacientes, você precisa criar a tabela `messages` no Supabase.

### Passo 1: Acessar o Supabase

1. Acesse o [Supabase Dashboard](https://app.supabase.com)
2. Selecione seu projeto (yuanqfswhberkoevtmfr)

### Passo 2: Criar a tabela

1. No menu lateral, clique em **SQL Editor**
2. Clique em **New Query**
3. Copie todo o conteúdo do arquivo `scripts/create-messages-table.sql`
4. Cole no editor SQL
5. Clique em **Run** ou pressione `Ctrl+Enter`

O script irá:
- Criar a tabela `messages` com os campos necessários
- Criar índices para otimizar as consultas
- Configurar Row Level Security (RLS) para garantir que usuários só vejam suas próprias mensagens
- Habilitar Realtime para receber mensagens instantaneamente

### Estrutura da Tabela

```sql
messages
├── id (UUID, PK)
├── sender_id (UUID, FK -> users.id)
├── receiver_id (UUID, FK -> users.id)
├── content (TEXT)
├── read (BOOLEAN)
├── created_at (TIMESTAMPTZ)
└── updated_at (TIMESTAMPTZ)
```

## Funcionalidades Implementadas

### Para Médicos (PainelMedico)
- Ver lista de pacientes disponíveis para iniciar conversa
- Ver conversas recentes com pacientes
- Enviar e receber mensagens em tempo real
- Ver contador de mensagens não lidas
- Marcar mensagens como lidas automaticamente

### Para Pacientes (AcompanhamentoPaciente)
- Ver lista de médicos disponíveis para iniciar conversa
- Ver conversas recentes com médicos
- Enviar e receber mensagens em tempo real
- Ver contador de mensagens não lidas
- Marcar mensagens como lidas automaticamente

## Componentes Criados

### ChatMessages
Componente reutilizável que gerencia:
- Lista de conversas
- Interface de chat
- Envio de mensagens
- Recebimento em tempo real via Supabase Realtime
- Marcação automática de mensagens como lidas

### messageService
Serviço que fornece métodos para:
- `getConversations()` - Lista conversas do usuário
- `getMessagesBetweenUsers()` - Busca mensagens entre dois usuários
- `sendMessage()` - Envia uma mensagem
- `markMessagesAsRead()` - Marca mensagens como lidas
- `subscribeToMessages()` - Inscreve para receber mensagens em tempo real

## Segurança

O sistema implementa Row Level Security (RLS) no Supabase com as seguintes políticas:

1. **Leitura**: Usuários só podem ver mensagens que enviaram ou receberam
2. **Inserção**: Usuários só podem enviar mensagens como remetentes
3. **Atualização**: Usuários só podem atualizar mensagens que receberam (para marcar como lidas)
4. **Exclusão**: Usuários só podem excluir mensagens que enviaram

## Uso

### Médico enviando mensagem para paciente:
1. Acesse o painel do médico
2. Clique na aba "Mensagens"
3. Selecione um paciente da lista ou de conversas recentes
4. Digite a mensagem e clique em "Enviar"

### Paciente enviando mensagem para médico:
1. Acesse o acompanhamento do paciente
2. Clique na aba "Mensagens"
3. Selecione um médico da lista ou de conversas recentes
4. Digite a mensagem e clique em "Enviar"

## Notificações em Tempo Real

O sistema usa Supabase Realtime para entregar mensagens instantaneamente. Quando uma nova mensagem chega:
- A lista de conversas é atualizada automaticamente
- Se a conversa está aberta, a mensagem aparece imediatamente
- O contador de mensagens não lidas é atualizado

## Troubleshooting

### Mensagens não aparecem
- Verifique se a tabela foi criada corretamente no Supabase
- Verifique se o Realtime está habilitado para a tabela `messages`
- Confira se as políticas RLS estão ativas

### Erro ao enviar mensagem
- Verifique se o usuário está autenticado
- Confirme que o sender_id e receiver_id são válidos
- Verifique as permissões RLS no Supabase

### Mensagens não chegam em tempo real
- Verifique se a tabela `messages` está na publicação `supabase_realtime`
- Confira o console do navegador para erros de conexão WebSocket
- Teste a conexão com o Supabase
