# Guía de Empaquetado y Portabilidad: TotalConnect 2.0

Para hacer que este proyecto sea lo más portable posible y evitar configurar entornos virtuales (`venv`), instalar `pip` o gestionar dependencias manualmente en cada servidor, existen dos enfoques recomendados:

---

## 🚀 Método 1: Empaquetar como un Ejecutable Único (PyInstaller)
Este método compila tu script de Python y todas sus dependencias (incluyendo el intérprete de Python, las librerías `total-connect-client`, `zeep`, etc.) dentro de un **único archivo ejecutable binario para Linux**.

### 👍 Ventajas:
* Genera un solo archivo (ej. `totalconnect`).
* **Cero dependencias:** No necesitas tener instalado Python, `pip`, ni crear entornos virtuales en el servidor destino. Solo copias el archivo y lo corres.
* Súper ligero (~15-20 MB).

### 🛠️ Cómo empaquetarlo (Ejecutar en la VM Linux `192.168.100.50`):

1. **Instalar PyInstaller en el entorno virtual actual:**
   ```bash
   cd /mnt/data2/Software/Bot-WhatsApp/TotalConnect
   ./venv/bin/pip install pyinstaller
   ```

2. **Compilar el script en un único archivo:**
   ```bash
   ./venv/bin/pyinstaller --onefile --name totalconnect index.py
   ```
   *(Este comando creará una carpeta `dist/` que contendrá el ejecutable final llamado `totalconnect`).*

3. **Cómo usar el ejecutable generado:**
   Puedes mover el archivo `dist/totalconnect` a cualquier parte (por ejemplo, a `/usr/local/bin/` para que sea un comando global) y correrlo directamente:
   * **Modo Servidor:** `./totalconnect --server 8080`
   * **Modo On-Demand:** `./totalconnect`

*Nota: Recuerda que `credentials.json` y `locations_cache.json` deben estar en la misma carpeta desde donde ejecutes el binario, ya que busca esos archivos en su directorio relativo.*

---

## 🐳 Método 2: Contenedorizar con Docker
Este método empaqueta todo el entorno (sistema operativo base, Python, librerías y código) dentro de una imagen de Docker.

### 👍 Ventajas:
* **Portabilidad absoluta:** Funciona de forma idéntica en cualquier sistema (Windows, macOS, Linux, AWS, Proxmox) que tenga instalado Docker.
* **Aislamiento total:** No interfiere en lo absoluto con las librerías del sistema operativo.
* Gestión de reinicios integrada (Docker se encarga de mantenerlo vivo).

### 🛠️ Archivos necesarios en la carpeta `/TotalConnect`:

1. **Crear un archivo `Dockerfile`:**
   ```dockerfile
   FROM python:3.11-slim

   WORKDIR /app

   # Instalar dependencias
   RUN pip install --no-cache-dir total-connect-client

   # Copiar código
   COPY index.py /app/index.py

   # Exponer puerto del servidor
   EXPOSE 8080

   # Comando para arrancar el servidor por defecto
   CMD ["python", "index.py", "--server", "8080"]
   ```

2. **Construir la imagen de Docker:**
   ```bash
   docker build -t totalconnect-monitor .
   ```

3. **Ejecutar el contenedor (montando las credenciales para poder cambiarlas desde fuera):**
   ```bash
   docker run -d \
     --name tc-monitor \
     --restart unless-stopped \
     -p 8080:8080 \
     -v $(pwd)/credentials.json:/app/credentials.json \
     -v $(pwd)/locations_cache.json:/app/locations_cache.json \
     totalconnect-monitor
   ```
