# Agente de impresión Volteos

Programa que corre en la **PC de la caja** (Windows). Consulta la cola en el servidor y envía los tickets a la impresora térmica local.

## Requisitos

- PHP 8.1+ con extensiones `mbstring`, `json`
- Composer
- Impresora térmica ESC/POS (USB/Windows, red IP o UNC)
- Token de agente generado en el admin web o con `php artisan print-agent:token` en el servidor

## Instalación en la PC de caja

```bash
cd print-agent
composer install --no-dev
copy .env.example .env
```

Edite `.env`:

```env
API_URL=https://su-dominio.com/api
AGENT_TOKEN=su_token_generado
POLL_INTERVAL=3
REQUEST_TIMEOUT=30
LOG_FILE=storage/agent.log
```

## Ejecución

### Windows (consola)

```bat
run.bat
```

### Windows — inicio automático sin ventana CMD

1. **Probar en print-agent:** doble clic en `VolteosPrintAgent-startup.vbs` o `ejecutar-oculto.vbs`.
2. **Instalar al inicio:** doble clic en `instalar-en-inicio-windows.vbs` (genera `VolteosPrintAgent.vbs` en Startup con la ruta de esta carpeta).
3. Si al iniciar sesión no arranca, edite `PHP_EXE` en el `.vbs` de Startup con la ruta completa a `php.exe`.

Logs: `storage/agent.log`

### Una sola pasada (prueba)

```bash
php bin/run.php --once
```

### Como tarea programada / servicio

Use **Programador de tareas de Windows** para ejecutar `run.bat` al iniciar sesión, o NSSM para registrarlo como servicio de Windows apuntando a:

```
php.exe C:\ruta\print-agent\bin\run.php
```

## Generar token en el servidor

Desde el proyecto Laravel principal:

```bash
php artisan print-agent:token 1 --name="Caja principal"
```

O en el admin: **Administración → Cola de impresión → Agentes locales → Nuevo agente**.

## Servidor (dominio)

En el `.env` del servidor Laravel:

```env
PRINT_MODE=queue
```

## Solución de problemas

| Problema | Revisar |
|----------|---------|
| HTTP 401 | Token incorrecto o agente desactivado |
| No imprime | IP/nombre Windows en configuración de impresora en el admin |
| Cola vacía | `PRINT_MODE=queue` en servidor y venta con impresión exitosa en cola |
| Error WindowsPrintConnector | Instalar driver de impresora y usar nombre exacto en Windows |
