<?php
// Incluir el archivo de procedimientos
include 'E:/www/sistema.nitrosimracing.com.co/conexiones/procedimientos/procedimientos.php';


// Llamar a la función prepararInfo al inicio
prepararInfo();

$host = 'localhost';
$db = 'db_inventarios_compranet';
$user = 'ndconsulta';
$pass = 'Nitro2021';

$dsn = "mysql:host=$host;dbname=$db;charset=utf8mb4";
$options = [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES => false,
];

try {
    $pdo = new PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
    throw new \PDOException($e->getMessage(), (int)$e->getCode());
}

// Token de autenticación
$token = 'rUXkAau1QjQU_XYUSvdCOIN8s2wyHcu12blRtrZbullfNahBIMmSVYbmgL0EMawfBNK0PXa6pzDKpfwCb2s14xW_SB1wXAHx78ljdCeH53pnRtAZwYHqOv3K572gKvON3dY-_RGgPA3dh3VdcMywxmXtB7kq5B11BkF6zHOzQ1Ij3_ACoS46NLAqGwtNwjcvlSPJCv4o1WadmN-wrw9JKx9SQK0V9Q3D7ov8ALlQ517_bi1aZZE9tf8V_uHn8vWCqlu2TUNyL_N30bkCkH7tJnVwEqiumlT3f0iK4FELKOoUmd118XWFRI_1wveZoh-_MQ8L0WXbC9wm4aAJxNURJTh1WZFIbVxRHQwhcse78wQU56B4cV45bf9lVAuNllawsfRq-vGRf4MnqJ8DMAIAAHcWmjuoDuhOrnUEaB3qDIKf32MDDOupD3n3GbNLjYkOf5d0YlaR0Z2PB8cpFvqHxQ5zJCY0kt1ZUdh2tnpD6woRzKdYZ6stwyV6FxJO_Sx0Be1GmZhmP6btg92tjXrzRg';

// Solicitud a la API
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://shopcommerce.mps.com.co:9236/api/Webapi/VerCatalogo");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "{}");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer $token",
    "Content-Type: application/json"
]);

$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);
if (json_last_error() !== JSON_ERROR_NONE) {
    error_log("Error decodificando el JSON principal: " . json_last_error_msg());
    exit("Error decodificando el JSON principal.");
}

$paginado = $data['paginado'];
$listaproductos = $data['listaproductos'];

// Insertar marcas
foreach ($paginado['Marcas'] as $marca) {
    $stmt = $pdo->prepare("INSERT INTO mps_marcas (id, codigo, nombre) VALUES (?, ?, ?)
                           ON DUPLICATE KEY UPDATE
                           codigo=VALUES(codigo), nombre=VALUES(nombre)");
    $stmt->execute([$marca[0], $marca[1], $marca[2]]);
}

// Insertar colores
foreach ($paginado['Colors'] as $color) {
    $stmt = $pdo->prepare("INSERT INTO mps_colores (nombre) VALUES (?)
                           ON DUPLICATE KEY UPDATE nombre=VALUES(nombre)");
    $stmt->execute([$color]);
}

// Insertar categorías
foreach ($paginado['CategoriasSub'] as $categoria) {
    $stmt = $pdo->prepare("INSERT INTO mps_categorias (id, nombre) VALUES (?, ?)
                           ON DUPLICATE KEY UPDATE nombre=VALUES(nombre)");
    $stmt->execute([$categoria[0], $categoria[1]]);
}

// Insertar productos y sus detalles
foreach ($listaproductos as $producto) {
    try {
        $sku = $producto['Sku'];
        $partnum = isset($producto['PartNum']) ? $producto['PartNum'] : NULL;
        $id_familia = isset($producto['IdFamilia']) ? $producto['IdFamilia'] : NULL;
        $familia = isset($producto['Familia']) ? $producto['Familia'] : NULL;
        $id_categoria = isset($producto['IdCategoria']) ? $producto['IdCategoria'] : NULL;
        $categoria = isset($producto['Categoria']) ? $producto['Categoria'] : NULL;
        $name = isset($producto['Name']) ? $producto['Name'] : NULL;
        $description = isset($producto['Description']) ? $producto['Description'] : NULL;
        $id_marca = isset($producto['IdMarca']) ? $producto['IdMarca'] : NULL;
        $marks = isset($producto['Marks']) ? $producto['Marks'] : NULL;
        $marca_homologada = isset($producto['MarcaHomologada']) ? $producto['MarcaHomologada'] : NULL;
        $salesminprice = isset($producto['Salesminprice']) ? $producto['Salesminprice'] : NULL;
        $salesmaxprice = isset($producto['Salesmaxprice']) ? $producto['Salesmaxprice'] : NULL;
        $precio = isset($producto['precio']) ? $producto['precio'] : NULL;
        $currency_def = isset($producto['CurrencyDef']) ? $producto['CurrencyDef'] : NULL;
        $quantity = isset($producto['Quantity']) ? $producto['Quantity'] : NULL;
        $tributari_classification = isset($producto['TributariClassification']) ? $producto['TributariClassification'] : NULL;
        $descuento = isset($producto['Descuento']) ? $producto['Descuento'] : NULL;
        $shipping = isset($producto['shipping']) ? $producto['shipping'] : NULL;
        $condicion = isset($producto['condition']) ? $producto['condition'] : NULL;
        $color = isset($producto['color']) ? $producto['color'] : NULL;
        $width = isset($producto['width']) ? $producto['width'] : NULL;
        $height = isset($producto['height']) ? $producto['height'] : NULL;
        $depth = isset($producto['depth']) ? $producto['depth'] : NULL;
        $dimensions_unit = isset($producto['dimensions_unit']) ? $producto['dimensions_unit'] : NULL;
        $weight = isset($producto['weight']) ? $producto['weight'] : NULL;
        $weight_unit = isset($producto['weight_unit']) ? $producto['weight_unit'] : NULL;
        $shipping_width = isset($producto['shipping_width']) ? $producto['shipping_width'] : NULL;
        $shipping_height = isset($producto['shipping_height']) ? $producto['shipping_height'] : NULL;
        $shipping_depth = isset($producto['shipping_depth']) ? $producto['shipping_depth'] : NULL;

        // Insertar en mps_productos
        $stmt = $pdo->prepare("INSERT INTO mps_productos (sku, partnum, id_familia, familia, id_categoria, categoria, name, description, id_marca, marks, marca_homologada, salesminprice, salesmaxprice, precio, currency_def, quantity, tributari_classification, descuento, shipping, condicion, color, width, height, depth, dimensions_unit, weight, weight_unit, shipping_width, shipping_height, shipping_depth)
                                VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?)
                                ON DUPLICATE KEY UPDATE
                                partnum=VALUES(partnum), id_familia=VALUES(id_familia), familia=VALUES(familia), id_categoria=VALUES(id_categoria), categoria=VALUES(categoria), name=VALUES(name), description=VALUES(description), id_marca=VALUES(id_marca), marks=VALUES(marks), marca_homologada=VALUES(marca_homologada), salesminprice=VALUES(salesminprice), salesmaxprice=VALUES(salesmaxprice), precio=VALUES(precio), currency_def=VALUES(currency_def), quantity=VALUES(quantity), tributari_classification=VALUES(tributari_classification), descuento=VALUES(descuento), shipping=VALUES(shipping), condicion=VALUES(condicion), color=VALUES(color), width=VALUES(width), height=VALUES(height), depth=VALUES(depth), dimensions_unit=VALUES(dimensions_unit), weight=VALUES(weight), weight_unit=VALUES(weight_unit), shipping_width=VALUES(shipping_width), shipping_height=VALUES(shipping_height), shipping_depth=VALUES(shipping_depth)");
        $stmt->execute([$sku, $partnum, $id_familia, $familia, $id_categoria, $categoria, $name, $description, $id_marca, $marks, $marca_homologada, $salesminprice, $salesmaxprice, $precio, $currency_def, $quantity, $tributari_classification, $descuento, $shipping, $condicion, $color, $width, $height, $depth, $dimensions_unit, $weight, $weight_unit, $shipping_width, $shipping_height, $shipping_depth]);

        // Insertar en mps_stock
        foreach ($producto['ListaProductosBodega'] as $bodega) {
            $stmt = $pdo->prepare("INSERT INTO mps_stock (sku, bodega, nombrebodega, cantidad) VALUES (?, ?, ?, ?)
                                   ON DUPLICATE KEY UPDATE
                                   nombrebodega=VALUES(nombrebodega), cantidad=VALUES(cantidad)");
            $stmt->execute([$sku, $bodega['Bodega'], $bodega['NombreBodega'], $bodega['Cantidad']]);
        }

        // Insertar en mps_imagenes
        foreach ($producto['Imagenes'] as $imagen) {
            if (!empty($imagen)) {
                $stmt = $pdo->prepare("INSERT INTO mps_imagenes (sku, link_imagen) VALUES (?, ?)
                                       ON DUPLICATE KEY UPDATE
                                       link_imagen=VALUES(link_imagen)");
                $stmt->execute([$sku, $imagen]);
            }
        }

        // Procesar xmlAttributes y almacenar los atributos
        if (isset($producto['xmlAttributes']) && !empty($producto['xmlAttributes'])) {
            $atributos = json_decode($producto['xmlAttributes'], true);

            // Verificar si la decodificación fue exitosa y si la estructura esperada existe
            if (json_last_error() === JSON_ERROR_NONE) {
                if (isset($atributos['ListaAtributos']['Atributos']['attributecs']) && is_array($atributos['ListaAtributos']['Atributos']['attributecs'])) {
                    foreach ($atributos['ListaAtributos']['Atributos']['attributecs'] as $atributo) {
                        if (is_array($atributo) && isset($atributo['AttributeName'], $atributo['AttributeValue'])) {
                            // Insertar en mps_lista_atributos si no existe
                            $stmt = $pdo->prepare("SELECT id FROM mps_lista_atributos WHERE nombre_atributo = ?");
                            $stmt->execute([$atributo['AttributeName']]);
                            $atributo_id = $stmt->fetchColumn();

                            if (!$atributo_id) {
                                $stmt = $pdo->prepare("INSERT INTO mps_lista_atributos (nombre_atributo) VALUES (?)");
                                $stmt->execute([$atributo['AttributeName']]);
                                $atributo_id = $pdo->lastInsertId();
                            }

                            // Insertar en mps_atributos_productos
                            $stmt = $pdo->prepare("INSERT INTO mps_atributos_productos (id_atributo, sku, valor_atributo) VALUES (?, ?, ?)
                                                   ON DUPLICATE KEY UPDATE
                                                   valor_atributo=VALUES(valor_atributo)");
                            $stmt->execute([$atributo_id, $sku, $atributo['AttributeValue']]);
                        } else {
                            error_log("Atributo mal formado en xmlAttributes para SKU: $sku");
                        }
                    }
                } else {
                    error_log("Estructura inesperada en xmlAttributes para SKU: $sku");
                }
            } else {
                // Manejar el error de decodificación JSON
                error_log("Error decodificando xmlAttributes para SKU: $sku. Error: " . json_last_error_msg());
            }
        } else {
            error_log("xmlAttributes no existe o está vacío para SKU: $sku");
        }
    } catch (\Exception $e) {
        error_log("Error procesando el producto con SKU: $sku. Error: " . $e->getMessage());
        continue; // Continuar con el siguiente producto
    }
}

echo "Importación completada.";

// Llamar al procedimiento almacenado actualizar_mps
try {
    $stmt = $pdo->prepare("CALL actualizar_mps()");
    $stmt->execute();
    echo "Procedimiento almacenado actualizar_mps ejecutado correctamente.";
} catch (\PDOException $e) {
    error_log("Error ejecutando el procedimiento almacenado actualizar_mps: " . $e->getMessage());
    exit("Error ejecutando el procedimiento almacenado actualizar_mps.");
}

// Llamar a la función actualizarmps al final
actualizarmps();

$HoraFin = date('h:i:s') . "\n";
echo $HoraFin;
echo "Proceso terminado.";
?>

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>Proceso terminado</title>
</head>
<body>
    <p>Proceso terminado. Mostrando barra de progreso...</p>
    <iframe src="https://sistema.compranet.com.co/conexiones/conexionwp/inventario_api.php?&id_proveedor=7" style="width:100%; height:500px; border:none;"></iframe>
    <iframe src="https://sistema.nitrosimracing.com.co/conexiones/wp/inventario_api.php?&id_proveedor=5" style="width:100%; height:500px; border:none;"></iframe>
</body>
</html>
