# Cambios al Schema: adsense-placement.json

## Resumen

Agregar 3 campos nuevos al grupo `behavior` para configurar el lazy loading de anuncios.

**Nota:** Los campos van en grupo `behavior` (priority 70) porque configuran el comportamiento del componente, no formularios de exclusion.

## Campos a Agregar

Ubicacion: `groups.behavior.fields`

### Campo 1: lazy_loading_enabled

```json
"lazy_loading_enabled": {
  "type": "boolean",
  "label": "Lazy Loading de Anuncios",
  "default": true,
  "editable": true,
  "description": "Cargar anuncios individualmente al entrar al viewport (mejora fill rate)"
}
```

### Campo 2: lazy_rootmargin

```json
"lazy_rootmargin": {
  "type": "select",
  "label": "Pre-carga (px antes del viewport)",
  "default": "200",
  "editable": true,
  "options": {
    "0": "0px (sin pre-carga)",
    "100": "100px",
    "200": "200px (recomendado)",
    "300": "300px",
    "400": "400px",
    "500": "500px"
  },
  "description": "Pixeles de anticipacion para iniciar carga de anuncio"
}
```

**Nota:** Tipo `select` en lugar de `number` porque el schema solo soporta: boolean, text, textarea, url, select, color.

### Campo 3: lazy_fill_timeout

```json
"lazy_fill_timeout": {
  "type": "select",
  "label": "Timeout de llenado (ms)",
  "default": "5000",
  "editable": true,
  "options": {
    "3000": "3 segundos",
    "5000": "5 segundos (recomendado)",
    "7000": "7 segundos",
    "10000": "10 segundos"
  },
  "description": "Tiempo maximo para esperar contenido de Google antes de ocultar slot"
}
```

## Comando de Sincronizacion

Despues de actualizar el JSON:

```bash
wp roi-theme sync-component adsense-placement
```

## Version del Schema

Incrementar version de `1.4.0` a `1.5.0` para reflejar nueva funcionalidad.

## Relacion con delay_enabled

El campo `delay_enabled` (en grupo `forms`) controla si la **biblioteca** `adsbygoogle.js` se carga con retraso.

El campo `lazy_loading_enabled` (en grupo `behavior`) controla si los **slots individuales** se activan por visibilidad.

**Ambos pueden estar activos simultaneamente** - son complementarios:
- `delay_enabled: true` = biblioteca no se carga hasta interaccion/timeout
- `lazy_loading_enabled: true` = slots se activan individualmente por viewport

Si `lazy_loading_enabled: false`, el sistema usa el comportamiento actual (cargar todos los ads de una vez despues de que la biblioteca cargue).

## Interaccion con Cache

**Importante:** El CSS dinamico generado por `CSSGeneratorService` incluye `display: none` para `.roi-ad-slot` cuando lazy loading esta habilitado.

Si se cambia `lazy_loading_enabled` de true a false:
1. El CSS dinamico cambiara en el siguiente render
2. **Se DEBE vaciar cache** (Redis, W3TC, OPcache) para que el cambio surta efecto
3. Usuarios con HTML cacheado veran slots ocultos hasta que su cache expire

**Recomendacion:** Agregar nota en FormBuilder indicando que cambios requieren vaciar cache.

## Parseo de Valores en PHP

Como los campos son tipo `select` con valores string, el `AdsenseAssetEnqueuer` debe parsear:

```php
wp_localize_script('adsense-loader', 'roiAdsenseConfig', [
    'lazyEnabled' => (bool) $settings['lazy_loading_enabled'],
    'rootMargin' => (int) $settings['lazy_rootmargin'] . 'px 0px',
    'fillTimeout' => (int) $settings['lazy_fill_timeout'],
    'debug' => WP_DEBUG,
]);
```
