# Question Bank UI - Documentación

## Vista General

El Banco de Preguntas es una interfaz completa en Studio para gestionar preguntas reutilizables con soporte para audio generado por IA.

## Acceso

```
http://localhost:3000/question-bank
```

## Componentes

### 1. Página Principal (`/question-bank/page.tsx`)

**Características:**
- Lista todas las preguntas del banco
- Filtros por tipo, dificultad, origen, audio
- Búsqueda por texto
- Estadísticas rápidas (total, importadas, con audio, IA)
- Accesos rápidos para crear e importar

**Estadísticas mostradas:**
```
┌──────────────┬──────────────┬──────────────┬──────────────┐
│ Total        │ MySQL        │ Con Audio    │ IA           │
│    150       │     45       │     32       │     18       │
└──────────────┴──────────────┴──────────────┴──────────────┘
```

### 2. QuestionBankCard (`QuestionBankCard.tsx`)

Tarjeta individual de pregunta que muestra:
- Tipo de pregunta (badge)
- Dificultad (color-coded)
- Texto de la pregunta (truncado)
- Opciones preview (primeras 3)
- Estado del audio
- Origen (MySQL, IA, Manual)
- Uso (veces utilizada)
- Acciones: Editar, Eliminar, Audio

**Badges de tipo:**
- 🟦 Opción Múltiple
- 🟩 Verdadero/Falso
- 🟨 Respuesta Corta
- 🟪 Ensayo
- 🟧 Emparejamiento
- 🔵 Ordenar
- 🟫 Completar
- 🟣 Respuesta Audio
- 🔴 Hotspot
- ⬛ Código

**Badges de dificultad:**
- 🟢 Fácil (easy)
- 🟡 Media (medium)
- 🔴 Difícil (hard)

**Badges de origen:**
- 🌐 MySQL - Importado desde sistema legacy
- ✨ IA - Generado por Inteligencia Artificial
- Manual - Creado manualmente

### 3. QuestionBankEditor (`QuestionBankEditor.tsx`)

Modal para crear/editar preguntas con:

**Campos:**
- Tipo de pregunta (10 tipos soportados)
- Dificultad (easy/medium/hard)
- Texto de la pregunta (required)
- Opciones (para multiple-choice/true-false)
- Respuesta correcta (selector radial)
- Explicación/feedback
- Puntos
- Etiquetas (tags)
- Checkbox "Generar audio automáticamente"

**Características especiales:**
- Botón "Generar con IA" para opciones y explicación
- Agregar/remover opciones dinámicamente
- Tags con auto-complete
- Validación en tiempo real

### 4. MySQLImportModal (`MySQLImportModal.tsx`)

Modal para importar preguntas desde MySQL:

**Flujo:**
1. Selecciona curso de MySQL (carga dinámica)
2. Click en "Importar Preguntas"
3. Importa todas las preguntas activas del curso
4. Muestra cantidad importada
5. Redirige a la lista actualizada

**Información mostrada:**
- Lista de cursos disponibles (NombreCurso + NombrePlan)
- Explicación de qué se importará
- Progreso de importación
- Resultado (éxito/error)

## Flujos de Usuario

### Crear Pregunta Manualmente

```
1. Click "Nueva Pregunta"
2. Seleccionar tipo de pregunta
3. Completar texto de pregunta
4. Agregar opciones (si aplica)
5. Marcar respuesta correcta
6. Agregar explicación (opcional)
7. Configurar puntos y dificultad
8. Agregar etiquetas
9. ☑️ Marcar "Generar audio automáticamente"
10. Click "Guardar Pregunta"
```

### Importar desde MySQL

```
1. Click "Importar desde MySQL"
2. Seleccionar curso del dropdown
3. Click "Importar Preguntas"
4. Esperar confirmación (ej: "Se importaron 45 preguntas")
5. Las preguntas aparecen en la lista con badge 🌐 MySQL
```

### Generar Audio para Pregunta

```
1. Click ícono 🔊 en pregunta (si no tiene audio)
2. (Opcional) Personalizar texto para audio
3. Seleccionar voz
4. Ajustar velocidad
5. Click "Generar Audio"
6. Esperar generación (5-30 segundos)
7. Click "Reproducir" para preview
8. Click "Cerrar" cuando esté listo
```

### Filtrar Preguntas

```
1. Click "Filtros"
2. Seleccionar tipo de pregunta
3. Seleccionar dificultad
4. Seleccionar origen
5. Filtrar por audio (con/sin)
6. Results se actualizan automáticamente
```

### Buscar Preguntas

```
1. Escribir en barra de búsqueda
2. Presionar Enter
3. Results filtran por texto en question_text
```

## Integración con Test Templates

Las preguntas del banco se pueden usar en:
- Plantillas de pruebas (Test Templates)
- Lecciones tipo quiz directamente
- Ejercicios de práctica

**Próximamente:**
- Selector de preguntas desde banco al crear plantilla
- Bulk selection para agregar múltiples preguntas
- Vista previa de pregunta con audio

## API Endpoints Utilizados

```typescript
// Listar preguntas
GET /question-bank?question_type=multiple-choice&difficulty=medium&has_audio=true

// Crear pregunta
POST /question-bank
{
  "question_text": "What is...?",
  "question_type": "multiple-choice",
  "options": ["A", "B", "C", "D"],
  "correct_answer": 0,
  "explanation": "Because...",
  "points": 1,
  "difficulty": "medium",
  "tags": ["grammar", "past-tense"],
  "generate_audio": true
}

// Actualizar pregunta
PUT /question-bank/{id}

// Eliminar pregunta
DELETE /question-bank/{id}

// Importar desde MySQL
POST /question-bank/import-mysql
{
  "mysql_course_id": 30,
  "import_all": true
}

// Generar audio
POST /question-bank/{id}/generate-audio
{
  "text": "What color is the sky?",
  "voice": "v2/en_speaker_1",
  "speed": 1.0
}

// Listar cursos MySQL
GET /question-bank/mysql-courses
```

## Estilos y UX

**Tema:**
- Soporte completo dark mode
- Colores consistentes con el resto de Studio
- Animaciones suaves (hover, transitions)

**Responsive:**
- Grid adaptable (1/2/3 columnas)
- Modal con scroll interno
- Touch-friendly en móviles

**Accesibilidad:**
- Labels en todos los inputs
- Focus visible
- ARIA attributes
- Keyboard navigation

## Próximas Mejoras

- [ ] Bulk audio generation (múltiples preguntas)
- [ ] Exportar preguntas a CSV/JSON
- [ ] Importar desde CSV
- [ ] Vista previa de pregunta completa en card
- [ ] Historial de ediciones
- [ ] Comentarios/notas en preguntas
- [ ] Compartir preguntas entre organizaciones
- [ ] Analytics de uso por pregunta
- [ ] AI-powered tagging automático
- [ ] Detección de preguntas duplicadas

## Troubleshooting

**Error: "No se pudo cargar los cursos de MySQL"**
- Verificar que `MYSQL_DATABASE_URL` esté configurado en `.env`
- Verificar conectividad al servidor MySQL

**Audio no se reproduce**
- Verificar formato de audio (WAV soportado)
- Verificar permisos del navegador
- Probar en otro navegador

## Referencias

- [Question Bank Backend](../../services/cms-service/src/handlers_question_bank.rs)
- [Test Templates UI](./TestTemplates/)
