# Estrutura Completa de Quiz (RewardType_Quiz)

## 📋 Estrutura de Questões

Cada questão no array `quiz_questions` deve ter a seguinte estrutura:

```json
{
  "id": "q1",  // ID único da questão (opcional, gerado automaticamente se não fornecido)
  "question": "Qual é a capital de Moçambique?",
  "options": [
    "Maputo",
    "Beira",
    "Nampula",
    "Quelimane"
  ],
  "correct_answer": 0,  // Índice da opção correta (0 = "Maputo")
  "points": 10,  // Pontos por resposta correta (opcional, usa quiz_points_per_correct se não especificado)
  "explanation": "Maputo é a capital e maior cidade de Moçambique"  // Explicação (opcional)
}
```

## 📊 Exemplo Completo de Quiz

```json
{
  "type": "RewardType_Quiz",
  "campaign_name": "Quiz Gastronómico Mimos",
  "sponsor_name": "Restaurante Mimos",
  "establishment_id": 321,
  "quiz_questions": [
    {
      "id": "q1",
      "question": "Qual é o prato mais popular do Restaurante Mimos?",
      "options": [
        "Frango Grelhado",
        "Peixe Grelhado",
        "Carne de Vaca",
        "Pizza"
      ],
      "correct_answer": 0,
      "points": 10,
      "explanation": "O Frango Grelhado é o prato mais pedido pelos clientes"
    },
    {
      "id": "q2",
      "question": "Quantos pontos ganha por cada 100 MZN gastos?",
      "options": [
        "10 pontos",
        "100 pontos",
        "1000 pontos",
        "1 ponto"
      ],
      "correct_answer": 0,
      "points": 10,
      "explanation": "A taxa padrão é 1 MT = 10 pontos, então 100 MT = 1000 pontos"
    },
    {
      "id": "q3",
      "question": "Qual é o horário de funcionamento do Restaurante Mimos?",
      "options": [
        "8h - 20h",
        "9h - 21h",
        "10h - 22h",
        "24 horas"
      ],
      "correct_answer": 1,
      "points": 10
    }
  ],
  "quiz_points_per_correct": 10,  // Pontos padrão por resposta correta
  "quiz_max_attempts": 3,  // Número máximo de tentativas
  "quiz_time_limit_seconds": 30,  // Tempo limite por pergunta (opcional)
  "valid_from": "2025-11-10T00:00:00Z",
  "valid_until": "2025-11-20T23:59:59Z",
  "status": "Activo"
}
```

## 🔍 Validação de Respostas

Para validar uma resposta do quiz, o sistema precisa:

1. **Receber a resposta do usuário:**
```json
{
  "campaign_id": "...",
  "question_id": "q1",
  "selected_answer": 0  // Índice da opção selecionada
}
```

2. **Validar se está correta:**
- Comparar `selected_answer` com `correct_answer` da questão
- Se correta: adicionar pontos ao usuário
- Se incorreta: retornar feedback (opcional)

3. **Rastrear tentativas:**
- Criar registro de tentativa do quiz
- Contar número de tentativas por usuário
- Verificar se excedeu `quiz_max_attempts`

## 📊 Tabela de Tentativas de Quiz

Seria necessário criar uma tabela para rastrear tentativas:

```sql
CREATE TABLE IF NOT EXISTS quiz_attempts (
    attempt_id SERIAL PRIMARY KEY,
    campaign_id VARCHAR(64) REFERENCES campaigns(campaign_id) ON DELETE CASCADE,
    user_id VARCHAR(64) REFERENCES users_profile(user_id) ON DELETE CASCADE,
    question_id VARCHAR(50),
    selected_answer INTEGER,
    is_correct BOOLEAN,
    points_earned INTEGER DEFAULT 0,
    attempt_number INTEGER,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    UNIQUE(campaign_id, user_id, question_id, attempt_number)
);
```

## 🔄 Fluxo de Uso

1. **Usuário inicia o quiz:**
   - GET `/api/campaigns/:id/quiz/start`
   - Retorna todas as questões do quiz

2. **Usuário responde uma questão:**
   - POST `/api/campaigns/:id/quiz/answer`
   - Body: `{ "question_id": "q1", "selected_answer": 0 }`
   - Retorna: `{ "is_correct": true, "points_earned": 10, "explanation": "..." }`

3. **Usuário finaliza o quiz:**
   - POST `/api/campaigns/:id/quiz/finish`
   - Retorna: `{ "total_points": 30, "correct_answers": 3, "total_questions": 3 }`

4. **Verificar progresso:**
   - GET `/api/campaigns/:id/quiz/progress`
   - Retorna: `{ "attempts_used": 1, "max_attempts": 3, "questions_answered": 2, "total_questions": 3 }`

