╔════════════════════════════════════════════════════════════════════════════╗
║           WABI v1.0.0 - ARQUITECTURA Y ESTRUCTURA DE PROYECTO             ║
╚════════════════════════════════════════════════════════════════════════════╝

📁 ESTRUCTURA DE CARPETAS
═════════════════════════

Wabi/
├── 📄 main.py                       ← PUNTO DE ENTRADA (ejecutar esto)
├── 📄 requirements.txt               ← Dependencias Python
├── 📄 README.md                      ← Documentación completa
├── 📄 INSTALL.txt                    ← Guía de instalación paso a paso
├── 🔨 ejecutar.bat                   ← Script Windows para ejecutar fácil
├── 📄 generar_ejemplo.py             ← Script para crear Excel de ejemplo
├── 📄 history.csv                    ← Historial de envíos (se genera automático)
│
├── 📁 config/                        ← CONFIGURACIÓN GLOBAL
│   ├── __init__.py
│   └── settings.py                   ← Colores, fonts, paths, rutas, delays
│
├── 📁 src/                           ← CÓDIGO PRINCIPAL
│   ├── __init__.py
│   │
│   ├── gui/                          ← INTERFAZ GRÁFICA (CustomTkinter)
│   │   ├── __init__.py
│   │   ├── app.py                    ← Ventana principal y lógica UI
│   │   └── styles.py                 ← Componentes y estilos personalizados
│   │
│   ├── automation/                   ← AUTOMATIZACIÓN (Selenium + Chrome)
│   │   ├── __init__.py
│   │   └── whatsapp_bot.py           ← Driver de Chrome, envío de mensajes
│   │
│   ├── data/                         ← MANEJO DE DATOS
│   │   ├── __init__.py
│   │   ├── excel_handler.py          ← Lectura/validación de Excel
│   │   └── history_manager.py        ← Gestión de historial CSV
│   │
│   └── utils/                        ← UTILIDADES
│       ├── __init__.py
│       ├── spintax.py                ← Procesador de variaciones {opción1|opción2}
│       └── logger.py                 ← Sistema de logging personalizado
│
├── 📁 data/                          ← DATOS Y EXPORTACIONES
│   ├── exports/                      ← Reportes exportados (CSV)
│   ├── user_data/                    ← Sesión persistente de Chrome (auto-generado)
│   └── logs/                         ← Archivos .log de la aplicación (auto-generado)
│
└── 📁 assets/                        ← RECURSOS (iconos, imágenes)
    └── icons/


🔄 FLUJO DE DATOS
═════════════════

1. USUARIO CARGA EXCEL
   Excel (.xlsx) → ExcelHandler.load_excel()
   ↓
   DataFrame con contactos validados
   ↓
   Se almacena en self.excel_data

2. USUARIO CONFIGURA MENSAJE
   Texto con Spintax/Variables → SpintaxProcessor.validate_spintax()
   ↓
   Valida sintaxis: {opción1|opción2}, {Variable}
   ↓
   Se almacena en self.text_message

3. USUARIO INICIA CAMPAÑA
   Para cada fila del Excel:
   a) Obtener teléfono y nombre
   b) Saltear si ya fue enviado (history.csv)
   c) Procesar Spintax + Variables con SpintaxProcessor.process()
   d) Enviar con WhatsAppAutomator.send_message()
   e) Registrar en HistoryManager.add_record()
   f) Aplicar delay aleatorio (5-10s)

4. USUARIO EXPORTA REPORTE
   history.csv → HistoryManager.export_report()
   ↓
   CSV en carpeta exports/
   ↓
   Timestamp en nombre: wabi_report_20240505_143022.csv


🎨 COMPONENTES PRINCIPALES
═══════════════════════════

┌─ GUI (CustomTkinter)
│  ├─ WabiApp (CTk)              → Ventana principal
│  ├─ StyledButton               → Botones con tema Wabi
│  ├─ StyledFrame                → Frames con esquinas redondeadas
│  ├─ StyledLabel                → Labels con tipografía consistente
│  └─ WabiTheme                  → Gestor del tema visual
│
├─ AUTOMATION (Selenium)
│  ├─ WhatsAppAutomator          → Control de Chrome + WhatsApp Web
│  ├─ initialize_driver()        → Inicia undetected-chromedriver
│  ├─ navigate_to_whatsapp()     → Abre web.whatsapp.com
│  ├─ send_message()             → Envía mensaje a teléfono
│  ├─ random_delay()             → Delay entre 5-10s
│  └─ _attach_file()             → Adjunta imagen/PDF
│
├─ DATA HANDLING
│  ├─ ExcelHandler               → Lee y valida Excel
│  ├─ HistoryManager             → Gestiona history.csv
│  ├─ load_excel()               → Importa contactos
│  └─ add_record()               → Registra envío en historial
│
└─ UTILS
   ├─ SpintaxProcessor           → Procesa variaciones
   │  ├─ process()               → Expande Spintax + Variables
   │  ├─ _expand_spintax()       → {opt1|opt2} → opt1 o opt2 aleatoriamente
   │  ├─ _replace_variables()    → {Nombre} → valor real
   │  └─ validate_spintax()      → Verifica sintaxis
   │
   └─ LoggerWabi                  → Logging personalizado
      ├─ add_callback()           → Actualiza consola en tiempo real
      ├─ log()                    → Registra mensaje
      └─ success/error/info()     → Métodos de conveniencia


⚙️ CONFIGURACIÓN (config/settings.py)
═════════════════════════════════════

COLORS = {
    "accent": "#25D366",           # Verde WhatsApp (principal)
    "error": "#E74C3C",            # Rojo para errores
    "success": "#27AE60",          # Verde para éxitos
    "bg_primary": "#FFFFFF",       # Blanco
    "text_primary": "#000000",     # Negro
}

FONTS = {
    "title": ("Segoe UI", 18, "bold"),     # Títulos grandes
    "body": ("Segoe UI", 10),              # Texto normal
    "mono": ("Courier New", 9),            # Logs (monoespaciado)
}

DELAYS = {
    "MIN_DELAY": 5,                # Mínimo entre envíos (segundos)
    "MAX_DELAY": 10,               # Máximo entre envíos (segundos)
}

CHROME_OPTIONS = {                 # Opciones anti-detección
    "disable-background-networking": None,
    "disable-sync": None,
    "no-default-browser-check": None,
    ...
}


📊 ARCHIVOS GENERADOS AUTOMÁTICAMENTE
═════════════════════════════════════

history.csv (Ejemplo):
┌────────────────┬──────────────┬────────────┬────────┬────────┬────────┐
│ Telefono       │ Nombre       │ Fecha      │ Hora   │ Estado │ Intento│
├────────────────┼──────────────┼────────────┼────────┼────────┼────────┤
│ +34123456789   │ Juan García  │ 2024-05-05 │ 14:30  │ Éxito  │ 1      │
│ +34987654321   │ María López  │ 2024-05-05 │ 14:31  │ Error  │ 1      │
└────────────────┴──────────────┴────────────┴────────┴────────┴────────┘

logs/ (Archivos de log):
wabi_20240505_143000.log
├─ 14:30:00 - INFO - Inicializando Chrome...
├─ 14:30:05 - INFO - Navegando a WhatsApp Web...
├─ 14:30:10 - SUCCESS - QR code visible
├─ 14:31:00 - INFO - Enviando a Juan García...
└─ 14:31:08 - SUCCESS - Mensaje enviado a +34123456789

data/user_data/ (Sesión persistente):
Profile/ (Datos de Chrome + sesión WhatsApp guardada)
└─ Permite acceder directo sin QR en próximas ocasiones


🛡️ MANEJO DE ERRORES
═════════════════════

Try-except en:
├─ ExcelHandler.load_excel()     → Validar archivo existe y tiene datos
├─ HistoryManager operaciones    → Manejo de archivos CSV
├─ WhatsAppAutomator             → Timeouts, elementos no encontrados
├─ SpintaxProcessor              → Sintaxis malformada
└─ Logger callbacks              → Excepciones en UI updates


🔐 SEGURIDAD
════════════

1. NO almacena contraseñas (usa sesión persistente de Chrome)
2. undetected-chromedriver previene detección de bots
3. Datos locales en PC, no en servidores
4. Delays aleatorios evitan patrones detectables
5. Headers de Chrome se preservan entre sesiones


🚀 PRÓXIMAS MEJORAS (Opcionales)
═════════════════════════════════

[ ] Base de datos SQLite en lugar de CSV
[ ] Encriptación de history.csv
[ ] Interfaz más avanzada con gráficos
[ ] Soporte para cuentas múltiples de WhatsApp
[ ] Programación automática de campañas
[ ] Integración con APIs externas
[ ] Versión web (FastAPI + React)


╔════════════════════════════════════════════════════════════════════════════╗
║                    ¡ARQUITECTURA LISTA PARA PRODUCCIÓN!                  ║
╚════════════════════════════════════════════════════════════════════════════╝
