<?php
require __DIR__ . '/vendor/autoload.php';

use Automattic\WooCommerce\Client;

// Configurar límites
set_time_limit(0);

// ——— AJUSTA ESTOS VALORES ———
$servername        = "localhost";              // <-- tu servidor
$dbCompranet       = "db_compranet";           // <-- tu BD principal
$dbWp              = "db_compranet_wp";        // <-- tu BD de WordPress
$dbUser            = "ndconsulta";             // <-- usuario MySQL
$dbPassword        = "Nitro2021";              // <-- contraseña MySQL
$wcStoreUrl        = "https://compranet.com.co"; // <-- URL de tu tienda
$wcConsumerKey     = "ck_910af40e780677e03593d388885a2e58b7c4fa43";
$wcConsumerSecret  = "cs_2983cea05dbc631dc6236c61c79feb35a61666cf";

// Parámetro opcional para un solo producto (id de tb_productos.id)
$productId = isset($_GET['id']) ? (int)$_GET['id'] : 0;

// Conexión MySQL
$conn = new mysqli($servername, $dbUser, $dbPassword);
if ($conn->connect_error) {
    die("Conexión fallida: " . $conn->connect_error);
}

// Consulta en la BD de Compranet
$conn->select_db($dbCompranet);
$sql = "
    SELECT p.wp_id, lc.nombre, p.id
    FROM tb_productos AS p
    INNER JOIN tb_categorias_productos AS cp ON p.id = cp.idProducto
    INNER JOIN tb_lista_categorias AS lc ON cp.idCategoria = lc.id
    WHERE p.wp_id > 0
";
if ($productId) {
    $sql .= " AND p.id = {$productId}";
}
$sql .= "
    ORDER BY p.wp_id DESC, lc.noOrden
";
// Para pruebas: si no filtras por producto, limita a 20
if (!$productId) {
    $sql .= "";
}

$result = $conn->query($sql);
if (!$result) {
    die("Error en consulta: " . $conn->error);
}

// Cliente WooCommerce
$woocommerce = new Client(
    $wcStoreUrl,
    $wcConsumerKey,
    $wcConsumerSecret,
    ['version' => 'wc/v3']
);

$lastWp = null;
while ($row = $result->fetch_assoc()) {

    $wpId = (int)$row['wp_id'];
    // Evita procesar varias veces el mismo wp_id
    if ($wpId === $lastWp) {
        continue;
    }
    $lastWp = $wpId;

    // Ruta completa de categorías: "Nivel1>Nivel2>...>NivelN"
    $fullPath = $row['nombre'];
    $parts    = array_map('trim', explode('>', $fullPath));
    $parent   = 0;            // comenzamos en raíz
    $categories = [];

    // Recorre cada nivel y busca term_id considerando el padre
    foreach ($parts as $catName) {
        $stmt = $conn->prepare("
            SELECT t.term_id
            FROM {$dbWp}.wp_terms AS t
            INNER JOIN {$dbWp}.wp_term_taxonomy AS tt
               ON t.term_id   = tt.term_id
              AND tt.taxonomy = 'product_cat'
              AND tt.parent   = ?
            WHERE t.name = ?
            LIMIT 1
        ");
        $stmt->bind_param('is', $parent, $catName);
        $stmt->execute();
        $stmt->bind_result($termId);
        if ($stmt->fetch()) {
            $categories[] = ['id' => $termId];
            $parent = $termId;  // el siguiente nivel usará este como padre
        }
        $stmt->close();
    }

    // Si no hubo categorías válidas, saltar
    if (empty($categories)) {
        echo "Producto {$wpId} → NO se encontraron categorías válidas.\n";
        continue;
    }

    // Determina la categoría primaria (la más profunda)
    $primaryTermId = end($categories)['id'];

    // Prepara el payload completo
    $data = [
        'categories' => $categories,
        'meta_data'  => [
            [
                'key'   => '_yoast_wpseo_primary_product_cat',
                'value' => $primaryTermId
            ]
        ]
    ];

    // Ejecuta la actualización
    try {
        $woocommerce->put("products/{$wpId}", $data);
        echo "Producto {$wpId} → categorías: "
            . implode(', ', $parts)
            . " │ primaria: {$primaryTermId}\n";
    } catch (Exception $e) {
        echo "Error WooCommerce en {$wpId}: " . $e->getMessage() . "\n";
    }
}

$conn->close();
