<?php

ini_set('display_errors', 1);
error_reporting(E_ALL);
    $date = date("Y-m-d"); // Fecha actual

    $servername = "localhost";
    $username = "ndconsulta";
    $password = "Nitro2021";
    $dbname = "db_productos";

    require 'google-translate-php-4.1/vendor/autoload.php';
    use Stichoza\GoogleTranslate\GoogleTranslate;
    try {
        $soap = new SoapClient("https://www.superfinanciera.gov.co/SuperfinancieraWebServiceTRM/TCRMServicesWebService/TCRMServicesWebService?WSDL", array(
            'soap_version' => SOAP_1_1,
            'trace' => 1,
            'location' => "https://www.superfinanciera.gov.co/SuperfinancieraWebServiceTRM/TCRMServicesWebService/TCRMServicesWebService",
        ));

        $response = $soap->queryTCRM(array('tcrmQueryAssociatedDate' => $date));
        $response = $response->return;

        if ($response->success) {
            $trm_value = $response->value;
            echo "TRM actual: $trm_value";

            // Actualizar la variable TRM en la base de datos
            $conn = new mysqli($servername, $username, $password, $dbname);

            if ($conn->connect_error) {
                die("Conexión fallida: " . $conn->connect_error);
            }

            // Obtener el valor actual de TRM en la base de datos
            $sql_select = "SELECT valor FROM pd_variables WHERE variable = 'TRM'";
            $result = $conn->query($sql_select);

            if ($result->num_rows > 0) {
                $row = $result->fetch_assoc();
                $trm_actual = $row["valor"];

                // Calcular el nuevo valor de TRM sumándole 10
                $nuevo_trm = $trm_value;

                // Actualizar el valor de TRM en la base de datos
                $sql_update = "UPDATE pd_variables SET valor = $nuevo_trm WHERE variable = 'TRM'";
                if ($conn->query($sql_update) === TRUE) {
                    echo " TRM actualizada en la base de datos: $nuevo_trm";
                } else {
                    echo "Error al actualizar TRM en la base de datos: " . $conn->error;
                }
            } else {
                echo "No se encontró la variable TRM en la base de datos";
            }

            // Cerrar la conexión a la base de datos
            $conn->close();
        } else {
            echo "Error en la respuesta: " . $response->errorMessages;
        }
    } catch (SoapFault $fault) {
        echo "Error al conectarse al servicio SOAP: " . $fault->getMessage();
    }

  

include('simple_html_dom.php');

$servername = "localhost";
$username = "ndconsulta";
$password = "Nitro2021";
$dbname = "db_productos";

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$truncateTableQuery = "TRUNCATE TABLE pd_rimotech";
$conn->query($truncateTableQuery);

$getLinksQuery = "SELECT link FROM pd_links";
$result = $conn->query($getLinksQuery);

$totalLinks = $result->num_rows;
$currentLink = 0;

if ($totalLinks > 0) {
    while ($row = $result->fetch_assoc()) {
        $currentLink++;
        $url = $row['link'];

        // Inicializar cURL
        $ch = curl_init();

        // Configurar opciones de cURL
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

        // Ejecutar cURL y obtener el contenido de la URL
        $htmlContent = curl_exec($ch);

        // Verificar si hubo algún error en la solicitud
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

        // Cerrar la sesión cURL
        curl_close($ch);

        if ($httpCode == 404) {
            echo "Error accessing link (404 Not Found): $url. Skipping...\n";
            continue;
        }

        // Procesar el contenido HTML con simple_html_dom
        $html = str_get_html($htmlContent);

        $productNameEn = $html->find('h1[itemprop=name]', 0)->plaintext;
        $availability = $html->find('span[itemprop=availability]', 0)->plaintext;

        $tr = new GoogleTranslate();
        $tr->setSource('en'); // Traducir del inglés
        $tr->setTarget('es'); // Al español
        $productName = $tr->translate($productNameEn); // Traducción

        $priceText = $html->find('span#price', 0)->plaintext;
        $price = floatval(preg_replace('/[^0-9.]/', '', $priceText));

        $sku = trim($html->find('span#product_id', 0)->plaintext);
        $productAvailability = $html->find('span.product_availability.availability-item', 0)->plaintext;

        $imagen1 = $imagen2 = $imagen3 = $imagen4 = $imagen5 = $imagen6 = '';

        $imageElements = $html->find('li.prod-thumb');

        foreach ($imageElements as $index => $element) {
            $imageLink = $element->find('a[data-zoom-id=listing_main_image_link]', 0)->href;

            switch ($index) {
                case 0:
                    $imagen1 = $imageLink;
                    break;
                case 1:
                    $imagen2 = $imageLink;
                    break;
                case 2:
                    $imagen3 = $imageLink;
                    break;
                case 3:
                    $imagen4 = $imageLink;
                    break;
                case 4:
                    $imagen5 = $imageLink;
                    break;
                case 5:
                    $imagen6 = $imageLink;
                    break;
            }
        }


  // Buscar la descripción corta en el elemento con class="short-description"
  $shortDescriptionElement = $html->find('div.short-description[itemprop=description]', 0);
  $descripcioncortaen = $shortDescriptionElement ? $shortDescriptionElement->innertext : '';

  // Buscar la descripción en el elemento con class="item"
  $descriptionElement = $html->find('div.item[itemprop=description]', 0);
  $descripcionen = $descriptionElement ? $descriptionElement->innertext : '';


  $descripcion = $tr->translate($descripcionen); // Traducción
  $descripcioncorta = $tr->translate($descripcioncortaen); // Traducción
 
        $sql = "INSERT INTO pd_rimotech (ProductName, Availability, price, sku, productAvailability, image1, image2, image3, image4, image5, image6, descripcion,descripcion_corta) VALUES ('$productName', '$availability', '$price', '$sku', '$productAvailability', '$imagen1', '$imagen2', '$imagen3', '$imagen4', '$imagen5', '$imagen6', '$descripcion','$descripcioncorta')";

        if ($conn->query($sql) === TRUE) {
            echo "Record inserted successfully\n";
        } else {
            echo "Error: " . $sql . "<br>" . $conn->error . "\n";
        }

        $percentage = ($currentLink / $totalLinks) * 100;
        echo "Progress: " . number_format($percentage, 2) . "%\n";
    }
} else {
    echo "No links found in pd_links table\n";
}

$conn->close();


       
    // Incluir la biblioteca Guzzle
require 'vendor/autoload.php';

// Configuración de las credenciales de Shopify
$shopifyDomain = 'extreme-simracing.myshopify.com';
$accessToken = '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';
$apiKey = 'b209e8ae2b90875a68b5aa6f5df88aab';
$apiSecret = 'b209e8ae2b90875a68b5aa6f5df88aab';

// Configuración de MySQL
$dbHost = 'localhost';
$dbUser = 'ndconsulta';
$dbPass = 'Nitro2021';
$dbName = 'db_productos';

// Conexión a MySQL
$mysqli = new mysqli($dbHost, $dbUser, $dbPass, $dbName);

if ($mysqli->connect_error) {
    die('Error de conexión a MySQL: ' . $mysqli->connect_error);
}
$deleteVariantsQuery = "DELETE FROM pd_es_variants";
$mysqli->query($deleteVariantsQuery);

// Limpiar la tabla pd_es_products
$deleteProductsQuery = "DELETE FROM pd_es_products";
$mysqli->query($deleteProductsQuery);


// Endpoint de Shopify para obtener productos
$url = "https://$shopifyDomain/admin/api/2023-10/products.json?&product_type=simagic&limit=250";

// Configuración de la solicitud a la API de Shopify
$client = new GuzzleHttp\Client();
$response = $client->request('GET', $url, [
    'headers' => [
        'Content-Type' => 'application/json',
        'X-Shopify-Access-Token' => $accessToken,
    ],
]);

// Decodificar la respuesta JSON
$data = json_decode($response->getBody(), true);

// Procesar los productos y almacenarlos en MySQL
foreach ($data['products'] as $product) {
    $productId = $product['id'];
    $productName = $product['title'];
    $productStatus = $product['status']; // Puedes ajustar esto dependiendo de cómo determines el estado del producto

    // Insertar en la tabla de MySQL (Información del Producto)
    $insertProductQuery = "INSERT INTO pd_es_products (id_producto, nombre, estado) VALUES ('$productId', '$productName', '$productStatus')";
    $mysqli->query($insertProductQuery);

    // Procesar las variantes del producto
    foreach ($product['variants'] as $variant) {
        $variantId = $variant['id'];
        $variantTitle = $variant['title'];
        $variantPrice = $variant['price'];
        $variantSku = $variant['sku'];
        $variantInventory = $variant['inventory_quantity'];
        $variantGrams = $variant['grams'];

        $variantSku = str_replace(' ', '-', $variantSku);
        // Reemplaza paréntesis (tanto el normal como el de ancho completo) por guiones medios
        $variantSku = str_replace(['(', '（', ')', '）'], '-', $variantSku);

        // Insertar en la tabla de MySQL (Información de la Variante)
        $insertVariantQuery = "INSERT INTO pd_es_variants (id_producto, id_variante, titulo_variante, precio_variante, sku_variante, inventario, gramos) VALUES ('$productId', '$variantId', '$variantTitle', '$variantPrice', '$variantSku', '$variantInventory', '$variantGrams')";
        $mysqli->query($insertVariantQuery);
    }
}
$actualizarInventario = "CALL inventario_tienda";
    $mysqli->query($actualizarInventario);
// Cerrar la conexión a MySQL
$mysqli->close();

echo 'Productos importados exitosamente a MySQL.';





    function ajustarFormatoHTML($html) {
        // Quitar espacios alrededor de las etiquetas span, li, h3, h4, ul, strong, header, p, main
        $html = preg_replace('/\s*<\s*(span|li|h3|h4|ul|strong|header|p|main)\s*(?:(?=\s)[^>]*)?>/', '<$1>', $html);
        $html = preg_replace('/<\s*\/\s*(span|li|h3|h4|ul|strong|header|p|main)\s*>\s*/', '</$1>', $html);
    
        // Eliminar todas las clases
        $html = preg_replace('/\s*class\s*=\s*"[^"]*"\s*/', '', $html);
    
        // Cambiar </h3><h3> a </h4><h4>
        $html = str_replace('</h3><h3>', '</h4><h4>', $html);
    
        return $html;
    }

$servername = "localhost";
$username = "ndconsulta";
$password = "Nitro2021";
$dbname = "db_productos";

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$truncateTableQuery = "TRUNCATE TABLE pd_fanatec_inventario";
$conn->query($truncateTableQuery);

$getLinksQuery = "SELECT link FROM pd_fanatec_links;";
$result = $conn->query($getLinksQuery);

$totalLinks = $result->num_rows;
$currentLink = 0;

if ($totalLinks > 0) {
    while ($row = $result->fetch_assoc()) {
        $currentLink++;
        $url = $row['link'];

        // Intenta obtener el HTML de la URL
        $html = @file_get_html($url); // Usando "@" para suprimir errores

        // Verifica si $html es falso o nulo
        if ($html === false) {
            // Si $html no es válido, continúa con el siguiente enlace
            echo "Error al obtener datos de: $url\n";
            continue; // Salta al siguiente ciclo del bucle
        }

         // Extract SKU
         $sku = $html->find('meta[itemprop=sku]', 0)->content;

         // Extract title
         $title = $html->find('meta[property=og:title]', 0)->content;

         // Extract price
        $price = $html->find('meta[property=product:price]', 0)->content;

        // Extract text status
$deliveryInformation = $html->find('p.delivery--information span.delivery--text', 0);

if ($deliveryInformation) {
    $statusText = trim($deliveryInformation->plaintext);

    if (strpos($statusText, 'Sold out') !== false) {
        $text_status = 'Sold out';
    } elseif (strpos($statusText, 'Open for Pre-Orders') !== false) {
        $text_status = 'Preventa';
    } elseif (strpos($statusText, 'Ready to ship') !== false) {
        $text_status = 'Listo para enviar';
    } elseif (strpos($statusText, 'Ships within 4-7 days') !== false) {
        $text_status = 'Envío en 4-7 días';
    } else {
        // Default case if none of the above conditions match
        $text_status = 'Estado desconocido';
    }
} else {
    // Default case if the delivery information span is not found
    $text_status = 'No se pudo determinar el estado';
}
                
/*
// Busca el contenedor del slider
$imageSliderContainer = $html->find('.image-slider--container', 0);

// Inicializa las variables de imagen
$imagen1 = $imagen2 = $imagen3 = $imagen4 = $imagen5 = $imagen6 = $imagen7 = '';

// Verifica si el contenedor del slider existe
if ($imageSliderContainer) {
    // Encuentra todos los elementos con la clase image-slider--item dentro del slider
    $sliderItems = $imageSliderContainer->find('.image-slider--item');

    // Itera sobre los elementos y extrae los valores de srcset
    foreach ($sliderItems as $index => $sliderItem) {
        // Obtén la imagen correspondiente al índice actual
        $imagenVar = 'imagen' . ($index + 1);

        // Busca el span con la clase image--element y extrae el valor de data-img-large
        $largeImage = $sliderItem->find('.image--element', 0)->getAttribute('data-img-large');

        // Asigna el valor a la variable correspondiente
        $$imagenVar = $largeImage;
    }
}


// Extraer Especificaciones
$descripcionen = ($elemento = $html->find('meta[name=description]', 0)) && $elemento->content ? $elemento->content : null;

// Verificar si $especificacionesen no es NULL antes de intentar traducir
if ($descripcionen !== null) {
    $tr = new GoogleTranslate();
    $tr->setSource('en'); // Traducir del inglés
    $tr->setTarget('es'); // Al español

    $descripcion = $tr->translate($descripcionen);

    // Realizar ajustes al HTML traducido
    $descripcion = ajustarFormatoHTML($descripcion);
} else {
    // En caso de que $especificacionesen sea NULL, asignar NULL a $especificaciones
    $descripcion = null;
}




// Extraer Especificaciones
$especificacionesen = ($elemento = $html->find('section.description-section--properties', 0)) && $elemento->innertext ? $elemento->innertext : null;

// Verificar si $especificacionesen no es NULL antes de intentar traducir
if ($especificacionesen !== null) {
    $tr = new GoogleTranslate();
    $tr->setSource('en'); // Traducir del inglés
    $tr->setTarget('es'); // Al español

    $especificaciones = $tr->translate($especificacionesen);

    // Realizar ajustes al HTML traducido
    $especificaciones = ajustarFormatoHTML($especificaciones);
} else {
    // En caso de que $especificacionesen sea NULL, asignar NULL a $especificaciones
    $especificaciones = null;
}


// Extraer Descripción Larga
$descripcion_larga_en = ($elemento = $html->find('div.product--description[itemprop=description]', 0)) && $elemento->innertext ? $elemento->innertext : null;

// Verificar si $descripcion_larga_en no es NULL antes de intentar traducir
if ($descripcion_larga_en !== null) {
    $tr = new GoogleTranslate();
    $tr->setSource('en'); // Traducir del inglés
    $tr->setTarget('es'); // Al español

    $descripcion_larga = $tr->translate($descripcion_larga_en);

    // Realizar ajustes al HTML traducido
    $descripcion_larga = ajustarFormatoHTML($descripcion_larga);
} else {
    // En caso de que $descripcion_larga_en sea NULL, asignar NULL a $descripcion_larga
    $descripcion_larga = null;
}


// Extraer Características
$caracteristicas_en = ($elemento = $html->find('section.description-section--features', 0)) && $elemento->innertext ? $elemento->innertext : null;

// Verificar si $caracteristicas_en no es NULL antes de intentar traducir
if ($caracteristicas_en !== null) {
    $tr = new GoogleTranslate();
    $tr->setSource('en'); // Traducir del inglés
    $tr->setTarget('es'); // Al español

    $caracteristicas = $tr->translate($caracteristicas_en);

    // Realizar ajustes al HTML traducido
    $caracteristicas = ajustarFormatoHTML($caracteristicas);
} else {
    // En caso de que $caracteristicas_en sea NULL, asignar NULL a $caracteristicas
    $caracteristicas = null;
}



// Busca el elemento meta con la propiedad og:image
$imageElement = $html->find('meta[property=og:image]', 0);

// Extrae la URL de la imagen
$imagen = $imageElement ? $imageElement->content : 'No se pudo determinar la imagen';

// Extraer Compatibilidad
$compatibilidad_en = ($elemento = $html->find('section.description-section--compatibility', 0)) && $elemento->innertext ? $elemento->innertext : null;

// Verificar si $compatibilidad_en no es NULL antes de intentar traducir
if ($compatibilidad_en !== null) {
    $tr = new GoogleTranslate();
    $tr->setSource('en'); // Traducir del inglés
    $tr->setTarget('es'); // Al español

    $compatibilidad = $tr->translate($compatibilidad_en);

    // Realizar ajustes al HTML traducido
    $compatibilidad = ajustarFormatoHTML($compatibilidad);
} else {
    // En caso de que $compatibilidad_en sea NULL, asignar NULL a $compatibilidad
    $compatibilidad = null;
}

// Extraer Notas Especiales
$notas_en = ($elemento = $html->find('section.description-section--specialnotes', 0)) && $elemento->innertext ? $elemento->innertext : null;

// Verificar si $notas_en no es NULL antes de intentar traducir
if ($notas_en !== null) {
    $tr = new GoogleTranslate();
    $tr->setSource('en'); // Traducir del inglés
    $tr->setTarget('es'); // Al español

    $notas = $tr->translate($notas_en);

    // Realizar ajustes al HTML traducido
    $notas = ajustarFormatoHTML($notas);
} else {
    // En caso de que $notas_en sea NULL, asignar NULL a $notas
    $notas = null;
}

// Extraer Embalaje
$packing_en = ($elemento = $html->find('section.description-section--packaging', 0)) && $elemento->innertext ? $elemento->innertext : null;

// Verificar si $packing_en no es NULL antes de intentar traducir
if ($packing_en !== null) {
    $tr = new GoogleTranslate();
    $tr->setSource('en'); // Traducir del inglés
    $tr->setTarget('es'); // Al español

    $packing = $tr->translate($packing_en);

    // Realizar ajustes al HTML traducido
    $packing = ajustarFormatoHTML($packing);
} else {
    // En caso de que $packing_en sea NULL, asignar NULL a $packing
    $packing = null;
}
*/

 // Inserción en pd_fanatec_inventario
 $sqlInsert = "INSERT INTO pd_fanatec_inventario (sku, title, price, text_status, linkProducto) VALUES ('$sku', '$title', '$price', '$text_status', '$url')";
 if ($conn->query($sqlInsert) === TRUE) {
     echo "Record inserted successfully\n";
 } else {
     echo "Error: " . $sqlInsert . "<br>" . $conn->error . "\n";
 }

 // Actualización en pd_fanatec_links
// $sqlUpdate = "UPDATE pd_fanatec_links SET packing='$packing' WHERE link='$url' AND (packing IS NULL OR packing = '');";
 /*image1='$imagen1', image2='$imagen2', image3='$imagen3', image4='$imagen4', image5='$imagen5', image6='$imagen6', image7='$imagen7', imagen_principal='$imagen',

 descripcion='$descripcion' 
 compatibilidad='$compatibilidad', 
 caracteristicas='$caracteristicas', 
 notas='$notas', 
 packing='$packing' */
 
 
 if ($conn->query($sqlUpdate) === TRUE) {
     echo "Record updated successfully\n";
 } else {
     echo "Error: " . $sqlUpdate . "<br>" . $conn->error . "\n";
 }


        // Calcular y mostrar el porcentaje de progreso
        $percentage = ($currentLink / $totalLinks) * 100;
        echo "Progress: " . number_format($percentage, 2) . "%\n";
    }
} else {
    echo "No links found in pd_links table\n";
}

$conn->close();

?>



