# Plan de Acción: wino-mail-dtkqt

## Decisión Arquitectónica: Qt6 Widgets (no QML)

**Motivación**: El cliente de correo es una aplicación de escritorio orientada a PC.
QML es excelente para dashboards animados y apps móviles, pero un cliente de correo
con árboles de carpetas, tablas de correos, formularios complejos y paneles divididos
se beneficia más de la madurez y eficiencia de Qt6 Widgets.

Beneficios clave del cambio:
- Integración directa con DTK (Deepin Tool Kit) para el tema nativo
- Menos dependencias: solo qt6-base-dev
- Modelos C++ (QAbstractItemModel, QSqlQueryModel) funcionan nativamente con QTreeView/QTableView
- Sin bridges QML → C++, todo es C++ puro
- Más eficiente con listas grandes de correos (miles de items)

El plan contempla descartar el QML existente y reconstruir la UI con QWidgets
reaprovechando toda la lógica C++ ya implementada (DAOs, servicios, sincronizadores,
modelos, EventBus, etc.).

---

## Fase 0 — Arreglar Build (base C++)
- [x] Arreglar includes relativos en synchronizers
- [x] Migrar main.cpp: eliminar QQmlApplicationEngine, usar QApplication + MainWindow widget
- [x] Verificar compilación completa del target wino-mail-qt
- [x] Revisar que todos los .h existentes tengan guards y #include correctos

## Fase 1 — Backend Core (completar lo que falta del C# original)
- [x] Implementar sistema de HTTP requests (request.cpp, concreterequests.cpp, requestprocessor.cpp)
- [x] Implementar ChangeProcessor completo (changetype.cpp, changprocessor.cpp)
- [x] Implementar EmailComposerBridge (preparar correos para envío)
- [x] Implementar SynchronizerProvider (fábrica de sincronizadores por tipo de cuenta)
- [x] Implementar AccountSetupDialogLauncher (lanzar diálogo de configuración inicial)

## Fase 2 — Autenticación y Servicios (port desde C#)
- [x] Portar IAuthenticator → GmailAuthenticator, OutlookAuthenticator (OAuth2 con Qt Network)
- [x] Portar AccountService: CRUD de cuentas de correo (IMAP, Gmail, Outlook)
- [x] Portar MailService: envío (SMTP) y recepción real de correos
- [x] Portar MimeStorageService: almacenamiento y gestión de adjuntos
- [x] Portar MimeFileService: exportar/importar .eml y adjuntos
- [x] Portar FolderService: gestión de carpetas (INBOX, Sent, Drafts, etc.)

## Fase 3 — UI con Qt6 Widgets (descartar QML)
- [x] **Diseñar estructura de navegación**: QMainWindow + QSplitter (panel izquierdo: árbol de carpetas, panel derecho: lista de correos + lector)
- [x] **Implementar MainWindow**: menú, toolbar, barra de estado, system tray
- [x] **AccountSetupDialog**: QDialog con wizard para configurar cuenta IMAP/Gmail/Outlook (OAuth2 o credenciales)
- [x] **FolderTreeView**: QTreeView con QStandardItemModel o modelo propio para mostrar jerarquía de carpetas
- [x] **MailListView**: QTableView o QTreeView con delegados personalizados
- [x] **ReaderPanel**: QTextBrowser o QWebEngineView para mostrar el cuerpo del correo
- [x] **ComposeDialog**: QDialog para redactar correos (To, CC, BCC, asunto, cuerpo HTML/plain, adjuntos)
- [x] **SearchBar**: QLineEdit con filtrado en tiempo real sobre el modelo de correos
- [x] **Ventanas independientes**: Botón en toolbar y ReaderView + doble clic en lista para abrir correo en ventana independiente
- [x] **AccountSetupDialog (Wizard)**: QDialog con wizard de 3 pasos para configurar cuenta Gmail/Outlook (OAuth2) o IMAP (credenciales manuales)

## Fase 4 — DTK Integration (tema Deepin)
- [ ] Habilitar DTK en CMakeLists.txt (detectar dtkwidget)
- [ ] Aplicar DMainWindow, DApplication, DTitlebar para el look nativo Deepin
- [ ] Adaptar QSS/DStyle para mantener coherencia visual
- [ ] Fallback a Qt widgets estándar si DTK no está disponible

## Fase 5 — Testing y QA
- [ ] Re-activar y arreglar tests unitarios (DAO, Translator, EventBus)
- [ ] Tests de integración (SyncScheduler con mock de sincronizadores)
- [ ] Tests de UI (verificar navegación, apertura de correos, composición)
- [ ] Benchmark con cargas grandes de correos (>10.000)
