<?php
$servername = "localhost";
$username = "ndconsulta";
$password = "Nitro2021";
$dbname = "db_inventarios_compranet";

// Crear conexión
$conn = new mysqli($servername, $username, $password, $dbname);

// Verificar conexión
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$tablas = ['promoopcion_productos', 'promoopcion_variantes', 'promoopcion_imagenes_variantes', 'promoopcion_imagenes_padre', 'promoopcion_stocks', 'promoopcion_tecnicas'];
foreach ($tablas as $tabla) {
    $sqlTruncate = "TRUNCATE TABLE $tabla";
    if ($conn->query($sqlTruncate) !== TRUE) {
        echo "Error al vaciar la tabla $tabla: " . $conn->error;
    }
}

function callAPI($endpoint, $data)
{
    $curl = curl_init();
    curl_setopt_array($curl, array(
        CURLOPT_URL => "https://promocionalesenlinea.net/api/" . $endpoint,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => "",
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 90,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_POSTFIELDS => json_encode($data),
        CURLOPT_HTTPHEADER => array(
            "Content-Type: application/json",
        ),
    ));

    // Desactivar la verificación del certificado SSL
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

    $response = curl_exec($curl);
    $err = curl_error($curl);

    curl_close($curl);

    if ($err) {
        echo "cURL Error #:" . $err;
    } else {
        return json_decode($response, true);
    }
}

$user = "COL0165";
$password = "UkekKAcJVNyrjI7m4J7e";

// Llamada a la API para obtener productos
$productos = callAPI("all-products", ["user" => $user, "password" => $password]);

// Asignar la respuesta de la API a $productos
$productos = $productos['response'];

// Insertar productos en la tabla promoopcion_productos
foreach ($productos as $producto) {
    $skuPadre = rtrim($producto['skuPadre'], '-');
    $skuPadre = $conn->real_escape_string($skuPadre);
    $nombrePadre = $conn->real_escape_string($producto['nombrePadre']);
    $categorias = $conn->real_escape_string($producto['categorias']);
    $descripcion = $conn->real_escape_string($producto['descripcion']);
    $material = $conn->real_escape_string($producto['material']);
    $capacidad = $conn->real_escape_string($producto['capacidad']);
    $medidas = $conn->real_escape_string($producto['medidas']);
    $alto = $conn->real_escape_string($producto['paquete']['alto']);
    $largo = $conn->real_escape_string($producto['paquete']['largo']);
    $ancho = $conn->real_escape_string($producto['paquete']['ancho']);
    $pesoBruto = $conn->real_escape_string($producto['paquete']['pesoBruto']);
    $pesoNeto = $conn->real_escape_string($producto['paquete']['pesoNeto']);
    $piezasCaja = $conn->real_escape_string($producto['paquete']['PiezasCaja']);
    $piezasInner = $conn->real_escape_string($producto['paquete']['PiezasInner']);
    $cajaIndividual = $conn->real_escape_string($producto['paquete']['cajaIndividual']);
    $cantidadInner = isset($producto['paquete']['cantidadInner']) ? $conn->real_escape_string($producto['paquete']['cantidadInner']) : "NULL";
    $unidadPeso = $conn->real_escape_string($producto['paquete']['unidadPeso']);
    $unidadVolumen = $conn->real_escape_string($producto['paquete']['unidadVolumen']);
    $tecnicaImpresion = $conn->real_escape_string($producto['impresion']['tecnicaImpresion']);
    $areaImpresion = $conn->real_escape_string($producto['impresion']['areaImpresion']);
    $actualizado = $conn->real_escape_string($producto['Actualizado']);

    $sql = "INSERT INTO promoopcion_productos 
    (skuPadre, nombrePadre, categorias, descripcion, material, capacidad, medidas, alto, largo, ancho, pesoBruto, pesoNeto, PiezasCaja, PiezasInner, cajaIndividual, cantidadInner, unidadPeso, unidadVolumen, tecnicaImpresion, areaImpresion, actualizado) 
    VALUES 
    ('$skuPadre', TitleCase(CleanHTML('$nombrePadre')), TitleCase(CleanHTML('$categorias')), CleanHTML('$descripcion'), CleanHTML('$material'), '$capacidad', '$medidas', '$alto', '$largo', '$ancho', '$pesoBruto', '$pesoNeto', '$piezasCaja', '$piezasInner', '$cajaIndividual', '$cantidadInner', '$unidadPeso', '$unidadVolumen', CleanHTML('$tecnicaImpresion'), CleanHTML('$areaImpresion'), '$actualizado')
    ON DUPLICATE KEY UPDATE 
    nombrePadre=VALUES(nombrePadre), categorias=VALUES(categorias), descripcion=VALUES(descripcion), material=VALUES(material), capacidad=VALUES(capacidad), medidas=VALUES(medidas), alto=VALUES(alto), largo=VALUES(largo), ancho=VALUES(ancho), pesoBruto=VALUES(pesoBruto), pesoNeto=VALUES(pesoNeto), PiezasCaja=VALUES(PiezasCaja), PiezasInner=VALUES(PiezasInner), cajaIndividual=VALUES(cajaIndividual), cantidadInner=VALUES(cantidadInner), unidadPeso=VALUES(unidadPeso), unidadVolumen=VALUES(unidadVolumen), tecnicaImpresion=VALUES(tecnicaImpresion), areaImpresion=VALUES(areaImpresion), actualizado=VALUES(actualizado)";

    if ($conn->query($sql) !== TRUE) {
        echo "Error: " . $sql . "<br>" . $conn->error;
    }

    // Insertar imágenes padre en la tabla promoopcion_imagenes_padre
    foreach ($producto['imagenesPadre'] as $urlImagen) {
        $urlImagen = $conn->real_escape_string($urlImagen);
        $sqlImagenPadre = "INSERT INTO promoopcion_imagenes_padre (skuPadre, urlImagen, esVector) 
        VALUES ('$skuPadre', '$urlImagen', '0')
        ON DUPLICATE KEY UPDATE urlImagen=VALUES(urlImagen), esVector=VALUES(esVector)";

        if ($conn->query($sqlImagenPadre) !== TRUE) {
            echo "Error: " . $sqlImagenPadre . "<br>" . $conn->error;
        }
    }

    // Insertar imágenes vector en la tabla promoopcion_imagenes_padre
    foreach ($producto['imagenesVector'] as $urlImagen) {
        $urlImagen = $conn->real_escape_string($urlImagen);
        $sqlImagenVector = "INSERT INTO promoopcion_imagenes_padre (skuPadre, urlImagen, esVector) 
        VALUES ('$skuPadre', '$urlImagen', '1')
        ON DUPLICATE KEY UPDATE urlImagen=VALUES(urlImagen), esVector=VALUES(esVector)";

        if ($conn->query($sqlImagenVector) !== TRUE) {
            echo "Error: " . $sqlImagenVector . "<br>" . $conn->error;
        }
    }

    // Insertar técnicas de impresión en la tabla promoopcion_tecnicas
    if (isset($producto['impresion'])) {
        $tecnicaImpresion = $conn->real_escape_string($producto['impresion']['tecnicaImpresion']);
        $areaImpresion = $conn->real_escape_string($producto['impresion']['areaImpresion']);

        $sqlImpresion = "INSERT INTO promoopcion_tecnicas (skuPadre, tecnicaImpresion, areaImpresion) 
        VALUES ('$skuPadre', '$tecnicaImpresion', '$areaImpresion')
        ON DUPLICATE KEY UPDATE tecnicaImpresion=VALUES(tecnicaImpresion), areaImpresion=VALUES(areaImpresion)";

        if ($conn->query($sqlImpresion) !== TRUE) {
            echo "Error: " . $sqlImpresion . "<br>" . $conn->error;
        }
    }

    // Insertar variantes en la tabla promoopcion_variantes
    foreach ($producto['hijos'] as $hijo) {
        $skuHijo = $conn->real_escape_string($hijo['skuHijo']);
        $nombreHijo = $conn->real_escape_string($hijo['nombreHijo']);
        $color = $conn->real_escape_string($hijo['color']);
        $precio = $conn->real_escape_string($hijo['precio']);
        $tipo = $conn->real_escape_string($hijo['tipo']);
        $moneda = $conn->real_escape_string($hijo['moneda']);
        $talla = $conn->real_escape_string($hijo['talla']);
        $estatus = $conn->real_escape_string($hijo['estatus']);

        $sqlHijo = "INSERT INTO promoopcion_variantes (skuPadre, skuHijo, nombreHijo, color, precio, tipo, moneda, talla, estatus) 
        VALUES ('$skuPadre', '$skuHijo', '$nombreHijo', '$color', '$precio', '$tipo', '$moneda', '$talla', '$estatus')
        ON DUPLICATE KEY UPDATE nombreHijo=VALUES(nombreHijo), color=VALUES(color), precio=VALUES(precio), tipo=VALUES(tipo), moneda=VALUES(moneda), talla=VALUES(talla), estatus=VALUES(estatus)";

        if ($conn->query($sqlHijo) !== TRUE) {
            echo "Error: " . $sqlHijo . "<br>" . $conn->error;
        }

        // Insertar imágenes de variantes en la tabla promoopcion_imagenes
        foreach ($hijo['imagenesHijo'] as $imagen) {
            $urlImagen = $conn->real_escape_string($imagen);

            $sqlImagen = "INSERT INTO promoopcion_imagenes_variantes (skuHijo, urlImagen) 
            VALUES ('$skuHijo', '$urlImagen')
            ON DUPLICATE KEY UPDATE urlImagen=VALUES(urlImagen)";

            if ($conn->query($sqlImagen) !== TRUE) {
                echo "Error: " . $sqlImagen . "<br>" . $conn->error;
            }
        }
    }
}

// Llamada a la API para obtener existencias
$response = callAPI("all-stocks", ["user" => $user, "password" => $password]);
if ($response['success']) {
    $existencias = $response['Stocks']; // Ajuste aquí

    // Insertar existencias en la tabla promoopcion_stocks
    foreach ($existencias as $existencia) {
        if ($existencia['Planta'] == 'COL') {
            $material = $conn->real_escape_string($existencia['Material']);
            $stock = $conn->real_escape_string($existencia['Stock']);
            $planta = $conn->real_escape_string($existencia['Planta']);

            $sqlStock = "INSERT INTO promoopcion_stocks (material, stock, planta) 
            VALUES ('$material', '$stock', '$planta')
            ON DUPLICATE KEY UPDATE stock=VALUES(stock), planta=VALUES(planta)";

            if ($conn->query($sqlStock) !== TRUE) {
                echo "Error: " . $sqlStock . "<br>" . $conn->error;
            }
        }
    }
} else {
    echo "Error al obtener existencias";
}

// Llamar al procedimiento almacenado actualizar_pvp
$call_query = "CALL actualizar_promoopcion;";
mysqli_query($conn, $call_query);

// Verificar si hubo errores en la llamada al procedimiento almacenado
if (mysqli_error($conn)) {
    echo "Error al llamar al procedimiento almacenado: " . mysqli_error($conn) . "<br>";
} else {
    echo "Procedimiento almacenado ejecutado correctamente<br>";
}

// Cerrar conexión
$conn->close();
$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=5" style="width:100%; height:500px; border:none;"></iframe>
    <iframe
        src="https://compranet.com.co/wp-content/plugins/compranet/modules/actualizar_stock.php?token=1111&id_proveedor=5"
        style="width:100%; height:500px; border:none;">
    </iframe>
</body>

</html>