    <?php
    // actualizardescripcioneswp.php
    require __DIR__ . '/vendor/autoload.php';

    use Automattic\WooCommerce\Client;
    use Automattic\WooCommerce\HttpClient\HttpClientException;

    /* --------------------------------------------------------------------------
    * 1. CONFIGURACIÓN BÁSICA
    * -------------------------------------------------------------------------- */

    set_time_limit(0);
    header('Content-Type: text/html; charset=UTF-8');
    while (ob_get_level()) ob_end_clean();
    ob_implicit_flush(true);

    /* --------------------------------------------------------------------------
    * 2. SALIDA HTML INICIAL (LOG + PROGRESO)
    * -------------------------------------------------------------------------- */
    echo '<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Actualizar Descripciones WP</title></head><body>';
    echo '<h1>Actualización de Descripciones</h1>';
    echo '<progress id="progressBar" value="0" max="10" style="width:100%;height:20px;"></progress>';
    echo '<pre id="log" style="background:#f0f0f0;padding:10px;font-family:monospace;"></pre>';
    echo <<<JS
    <script>
    function log(t){document.getElementById('log').textContent+=t+"\\n";}
    function prog(c,t){const b=document.getElementById('progressBar');b.max=t;b.value=c;}
    </script>
    JS;

    /* --------------------------------------------------------------------------
    * 3. PARÁMETROS GET
    * -------------------------------------------------------------------------- */
    $idFilter = isset($_GET['id']) ? (int)$_GET['id'] : 0;

    /* --------------------------------------------------------------------------
    * 4. CONEXIÓN MYSQL
    * -------------------------------------------------------------------------- */
    $mysqli = new mysqli('localhost', 'ndconsulta', 'Nitro2021', 'db_compranet');
    if ($mysqli->connect_error) {
        die('Conexión fallida: ' . $mysqli->connect_error);
    }

    /* --------------------------------------------------------------------------
    * 5. CLIENTE WOOCOMMERCE
    * -------------------------------------------------------------------------- */
    $wc = new Client(
        'https://compranet.com.co',
        'ck_910af40e780677e03593d388885a2e58b7c4fa43',
        'cs_2983cea05dbc631dc6236c61c79feb35a61666cf',
        [
            'wp_api'            => true,
            'version'           => 'wc/v3',
            'query_string_auth' => true,
            'timeout'           => 300,     // 5 minutos
            'connect_timeout'   => 30,      // opcional, espera de conexión
            'verify_ssl'        => false,
        ]
    );

    /* --------------------------------------------------------------------------
    * 6. CONSULTA DE PRODUCTOS
    * -------------------------------------------------------------------------- */
    $sql = "
    SELECT tb_productos.id, tb_productos.wp_id, tb_productos.nombre, tb_productos.descripcion, tb_productos.txtMedidas, tb_productos.txtMaterial, tb_productos.txtMarca, tb_productos.txtAreaLogo, tb_productos.txtEmpaque, tb_productos.txtObservaciones, tb_productos.ventaMinima, tb_productos.ventaMultiplo, tb_productos.seo_short_desc, tb_productos.yoast_meta_desc, tb_productos.seo_keywords, tb_productos.notasInternas, tb_productos.urlExterna, tb_productos.referenciaProveedor, tb_proveedores.nombre AS Proveedor, tb_productos.seo_title, tb_tipo_envio.alto_cm, tb_tipo_envio.ancho_cm, tb_tipo_envio.largo_cm, tb_tipo_envio.peso_kg, tb_productos.idImpuesto, tb_productos.idTipoEnvio
    FROM (tb_productos LEFT JOIN tb_proveedores ON tb_productos.idProveedor = tb_proveedores.id) LEFT JOIN tb_tipo_envio ON tb_productos.idTipoEnvio = tb_tipo_envio.id
    WHERE (((tb_productos.wp_id)>0))";
    if ($idFilter) {
        $sql .= " AND tb_productos.id = {$idFilter}";
    }

    $sql .= " ORDER BY tb_productos.wp_id DESC;";
    $res = $mysqli->query($sql);
    if (!$res) {
        die('Error en la consulta: ' . $mysqli->error);
    }

    $total     = $res->num_rows;
    $curr      = 0;
    $chunkSize = 100;
    $batch     = ['update' => []];

    /* --------------------------------------------------------------------------
    * 7. BUCLE PRINCIPAL
    * -------------------------------------------------------------------------- */
    while ($row = $res->fetch_assoc()) {
        $curr++;
        echo "<script>prog($curr,$total);log('Procesando wp_id={$row['wp_id']} ($curr/$total)');</script>";

        $wp_id = (int)$row['wp_id'];

        // 1) Eliminar dobles espacios en nombre
        $name = preg_replace('/\s+/', ' ', trim($row['nombre']));

        // 2) Construir short description
        $short = htmlspecialchars($row['seo_short_desc'] ?? '');
        $notes = [];
        if ($row['ventaMinima'] > 1 && $row['ventaMultiplo'] > 1) {
            $notes[] = "Este producto se vende mínima de {$row['ventaMinima']} y en múltiplos de {$row['ventaMultiplo']} unds";
        } elseif ($row['ventaMinima'] > 1) {
            $notes[] = "Venta mínima {$row['ventaMinima']} unds";
        } elseif ($row['ventaMultiplo'] > 1) {
            $notes[] = "Se vende en múltiplos de {$row['ventaMultiplo']} unds";
        }
        if (!empty($notes)) {
            $short .= '<div style="color:red; font-weight:bold;">Nota: ' . implode(' y ', $notes) . '</div>';
        }
        $short .= '<p style="font-weight:bold;">Pregunta por nuestras escalas de descuento al por mayor</p>';
        // Eliminar dobles espacios
        $short = preg_replace('/\s+/', ' ', trim($short));

        // 3) Construir long description
        $desc = '';
        if (!empty($row['descripcion'])) {
            $desc .= '<p>' . nl2br(htmlspecialchars($row['descripcion'])) . '</p>';
        }
        $fields = [
            'txtMedidas'       => 'Medidas:',
            'txtMaterial'      => 'Elaborado en:',
            'txtMarca'         => 'Tipo de Personalización (Opcional):',
            'txtAreaLogo'      => 'Area de Personalización (Opcional):',
            'txtEmpaque'       => 'Empaque al por mayor:',
            'txtObservaciones' => 'Notas:',
        ];
        foreach ($fields as $key => $label) {
            if (!empty($row[$key])) {
                $desc .= '<p><strong>' . $label . '</strong> ' . htmlspecialchars($row[$key]) . '</p>';
            }
        }
        if (!empty($notes)) {
            $desc .= '<p style="color:red; font-weight:bold;">Nota: ' . implode(' y ', $notes) . '</p>';
        }
        $desc .= '<p style="font-weight:bold;">Pregunta por nuestras escalas de descuento al por mayor</p>';
        // Eliminar dobles espacios
        $desc = preg_replace('/\s+/', ' ', trim($desc));

        // 4) Extraer primeras 3 palabras de seo_keywords (sin comas)
        $raw_kw    = $row['seo_keywords'] ?? '';
        $clean_kw  = str_replace(',', '', $raw_kw);
        $words     = preg_split('/\s+/', trim($clean_kw));
        $focuskw   = implode(' ', array_slice($words, 0, 3));
        $focuskw   = preg_replace('/\s+/', ' ', trim($focuskw));

        // 5) Preparar entry para batch
        $data = [
            'id'                => $wp_id,
            'name'              => $name,
            'short_description' => $short,
            'description'       => $desc,
        ];

        // ——— 5.1 Sección de envío ———
        $data['weight'] = (string)$row['peso_kg'];
        $data['dimensions'] = [
            'length' => (string)$row['largo_cm'],
            'width'  => (string)$row['ancho_cm'],
            'height' => (string)$row['alto_cm'],
        ];
        if ((int)$row['idTipoEnvio'] === 1) {
            // shipping_class_id = 415 → “estandar”
            $data['shipping_class'] = 'estandar';
        }


        // ——— 5.2 Sección de impuestos ———
        if ((int)$row['idImpuesto'] === 1) {
            $data['tax_status'] = 'none';
            $data['tax_class']  = '';
        } elseif ((int)$row['idImpuesto'] === 2) {
            $data['tax_status'] = 'taxable';
            $data['tax_class']  = '';
        }


        // 6) Construir meta_data
        $meta = [];
        if (!empty($row['yoast_meta_desc'])) {
            $meta[] = ['key' => '_yoast_wpseo_metadesc', 'value' => preg_replace('/\s+/', ' ', trim($row['yoast_meta_desc']))];
        }
        // CAMBIO: insertar sólo primeras 3 palabras como foco (Keyphrase de Yoast)
        if (!empty($focuskw)) {
            $meta[] = ['key' => '_yoast_wpseo_focuskw', 'value' => $focuskw];
        }
        if (!empty($row['seo_title'])) {
            $meta[] = ['key' => '_yoast_wpseo_title', 'value' => preg_replace('/\s+/', ' ', trim($row['seo_title']))];
        }
        // CAMBIO: nuevos meta para compranet
        $meta[] = ['key' => 'compranet_id',             'value' => $row['id']];
        $meta[] = ['key' => 'compranet_proveedor',      'value' => preg_replace('/\s+/', ' ', trim($row['Proveedor']))];
        $meta[] = ['key' => 'compranet_ref_proveedor',  'value' => preg_replace('/\s+/', ' ', trim($row['referenciaProveedor']))];
        if (!empty($row['urlExterna'])) {
            $meta[] = ['key' => 'compranet_url_ext',    'value' => preg_replace('/\s+/', ' ', trim($row['urlExterna']))];
        }
        if ($meta) {
            $data['meta_data'] = $meta;
        }

        $batch['update'][] = $data;

        // 7) Enviar batch cada $chunkSize elementos
        if (count($batch['update']) === $chunkSize) {
            try {
                $wc->post('products/batch', $batch);
                echo "<script>log('  → Batch OK: actualizados {$chunkSize} productos');</script>";
            } catch (HttpClientException $e) {
                echo "<script>log('  → Batch ERROR: " . addslashes($e->getMessage()) . "');</script>";
            }
            $batch['update'] = [];
        }
    }

    /* --------------------------------------------------------------------------
    * 8. ENVIAR RESTO DEL BATCH
    * -------------------------------------------------------------------------- */
    if (!empty($batch['update'])) {
        $count = count($batch['update']);
        try {
            $wc->post('products/batch', $batch);
            echo "<script>log('  → Batch OK: actualizados {$count} productos');</script>";
        } catch (HttpClientException $e) {
            echo "<script>log('  → Batch ERROR: " . addslashes($e->getMessage()) . "');</script>";
        }
    }

    /* --------------------------------------------------------------------------
    * 9. CIERRE
    * -------------------------------------------------------------------------- */
    echo "<script>log('Proceso finalizado.');</script>";
    echo '</body></html>';
    $mysqli->close();
