# Role: AGENDA_VIEWER

## Descrição
A role `AGENDA_VIEWER` foi criada para usuários internos da empresa Photum que precisam visualizar informações da agenda, mas sem permissão para modificar dados ou acessar informações de logística.

## Características

### Permissões (O que pode fazer)
- ✅ **Ver lista completa da agenda**: Acesso completo à listagem de eventos
- ✅ **Ver detalhes dos eventos**: Pode visualizar todas as informações detalhadas de cada evento
- ✅ **Ver profissionais alocados**: Pode ver quais profissionais estão designados para cada evento
- ✅ **Ver escala de profissionais**: Pode visualizar os horários e alocações da equipe
- ✅ **Ver informações gerais**: Datas, locais, horários, observações, etc.

### Restrições (O que NÃO pode fazer)
- ❌ **Criar novos eventos**: Botão de criar evento não aparece
- ❌ **Editar eventos existentes**: Sem acesso às operações de escrita
- ❌ **Deletar eventos**: Sem permissão de exclusão
- ❌ **Modificar equipe**: Não pode adicionar ou remover profissionais
- ❌ **Alterar status**: Não pode mudar status de eventos ou alocações
- ❌ **Acessar logística**: Toda seção de logística (carros, passageiros) está bloqueada
- ❌ **Criar/editar escalas**: Visualiza mas não pode modificar

## Implementação Técnica

### Backend
- **Constante**: `RoleAgendaViewer = "AGENDA_VIEWER"` em `internal/auth/service.go`
- **Middlewares**: 
  - `RequireWriteAccess()`: Bloqueia todas operações de escrita (POST, PUT, DELETE, PATCH)
  - `RequireLogisticsAccess()`: Bloqueia todo acesso ao grupo `/logistica`

### Frontend
- **Enum**: `AGENDA_VIEWER` adicionado em `types.ts`
- **Navbar**: Menu exibe apenas "Agenda"
- **Dashboard**: Botão "Novo Evento" não aparece
- **EventDetails**: Seção de logística não é renderizada
- **EventScheduler**: Formulário de adicionar profissionais não aparece

## Endpoints Disponíveis

### Leitura (Permitido)
```
GET /api/agenda                    - Listar eventos
GET /api/agenda/:id                - Ver detalhes do evento
GET /api/agenda/:id/professionals  - Ver profissionais do evento
GET /api/agenda/:id/available      - Ver profissionais disponíveis
GET /api/escalas                   - Ver escalas
```

### Escrita (Bloqueado - 403 Forbidden)
```
POST /api/agenda                   - Criar evento
PUT /api/agenda/:id                - Editar evento
DELETE /api/agenda/:id             - Deletar evento
POST /api/agenda/:id/professionals - Adicionar profissional
PATCH /api/agenda/:id/status       - Atualizar status
...etc
```

### Logística (Bloqueado - 403 Forbidden)
```
GET /api/logistica/*               - Toda rota de logística
POST /api/logistica/*
PUT /api/logistica/*
DELETE /api/logistica/*
```

## Caso de Uso
Esta role é ideal para:
- Coordenadores que precisam acompanhar a agenda
- Supervisores que monitoram eventos
- Equipe de suporte que precisa consultar informações
- Qualquer pessoa interna que necessite visibilidade sem poder alterar dados

## Criação de Usuário

Para criar um usuário com essa role:

```json
POST /api/auth/register
{
  "email": "viewer@photum.com",
  "senha": "senha_segura",
  "role": "AGENDA_VIEWER",
  "nome": "Nome do Visualizador",
  "telefone": "+55 11 99999-9999",
  "tipo_profissional": ""
}
```

**Nota**: Como é um usuário interno da Photum, não precisa criar perfil de profissional ou cliente.

## Testes

### Teste 1: Login e Navegação
1. Fazer login com usuário AGENDA_VIEWER
2. Verificar que apenas "Agenda" aparece no menu
3. Confirmar que não há botão "Novo Evento"

### Teste 2: Visualização
1. Acessar a lista de eventos
2. Clicar em um evento para ver detalhes
3. Verificar que todos os detalhes são exibidos
4. Confirmar que seção de logística não aparece

### Teste 3: Tentativa de Modificação (deve falhar)
1. Tentar fazer requisição POST/PUT/DELETE para `/api/agenda`
2. Deve retornar `403 Forbidden` com mensagem "você não tem permissão para modificar dados"

### Teste 4: Bloqueio de Logística
1. Tentar acessar `/api/logistica/carros`
2. Deve retornar `403 Forbidden` com mensagem "você não tem permissão para acessar logística"

## Mensagens de Erro

- **Tentativa de escrita**: `"você não tem permissão para modificar dados"`
- **Tentativa de acesso à logística**: `"você não tem permissão para acessar logística"`
- **Token inválido**: `"invalid token"`
- **Sem autenticação**: `"authorization header required"`
