<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Cliente;
use App\Services\SalesmanagoService;
use Illuminate\Support\Facades\Log;

class ProductsController extends Controller
{
    protected $salesmanago;

    public function __construct(SalesmanagoService $salesmanago)
    {
        $this->salesmanago = $salesmanago;
    }

    public function insertProducts()
    
    {
 // Datos de autenticación para acceder a la API de Jumpseller
$login = 'ad40bca92866e41e0356b0822f7309fd';
$authtoken = 'f8b479a92d578f431bb906173df8f2f5';

// URL base de la API para obtener los productos
$base_url = 'https://api.jumpseller.com/v1/products.json';

// Inicializa la sesión cURL
$totalProducts = 0; // Variable para contar el total de productos
$page = 1; // Página inicial
$limit = 50; // Número de productos por página (ajusta según la API)
$salesmanagoData = array(
    "catalogId" => "f8ece8dd-9425-488a-b2ab-2690001c7e58",
    "products" => array()
);

// Bucle para recorrer todas las páginas
do {
    // Construye la URL para la página actual
    $url = $base_url . '?page=' . $page . '&limit=' . $limit;

    // Inicializa una nueva sesión cURL
    $ch = curl_init($url);

    // Configura las opciones para la sesión cURL
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Devuelve el resultado como una cadena de texto
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); // Define el tipo de contenido
    curl_setopt($ch, CURLOPT_USERPWD, $login . ":" . $authtoken); // Configura la autenticación básica

    // Ejecuta la solicitud y obtiene la respuesta
    $response = curl_exec($ch);

    // Manejo de errores en caso de que la solicitud falle
    if ($response === false) {
        echo 'Curl error: ' . curl_error($ch);
        curl_close($ch); // Cierra la sesión cURL
        exit(); // Sale del script
    }

    // Cierra la sesión cURL
    curl_close($ch);

    // Decodifica la respuesta JSON a un array asociativo
    $products = json_decode($response, true);

    // Verifica si la decodificación fue exitosa
    if (is_array($products)) {
        // Agrega la cantidad de productos de la página actual al total
        $productCount = count($products);
        $totalProducts += $productCount;
        
        // Preparar datos para Salesmanago
        foreach ($products as $product) {
            $productId = $product['product']['id'];
            $productName = $product['product']['name'];
            $description = strip_tags($product['product']['description']);
            $productUrl = 'https://www.aurusjoyeria.cl/' . strtolower(str_replace(' ', '-', $product['product']['permalink']));
            $mainImageUrl = !empty($product['product']['images'][0]['url']) ? $product['product']['images'][0]['url'] : '';
            
            $available  = "true";
            
            if($product['product']['stock']>0){
                $available="true";
            }
            else{
                $available = "false";
            }
            
            if (strlen($description) > 1024) {
                $description = substr($description, 0, 1024);
            }

            // Obtener todas las URLs de imágenes
            $imageUrls = array();
            foreach ($product['product']['images'] as $image) {
                $imageUrls[] = $image['url'];
            }
        
            // Obtener las categorías
            $categories = array();
            foreach ($product['product']['categories'] as $category) {
                $categories[] = $category['name'];
            }
            $firstCategory = isset($categories[0]) ? $categories[0] : 'Default Category';
            $salesmanagoData['products'][] = array(
                "productId" => (string)$productId,
                "name" => $productName,
                "mainCategory" => $firstCategory, // Aquí se puede ajustar según la lógica de negocio
                "productUrl" => $productUrl,
                "mainImageUrl" => $mainImageUrl,
                "available" => $available,
                "active" => true,
                "price" => $product['product']['price']
            );
        }
        
        // Si la cantidad de productos en la respuesta es menor que el límite, hemos llegado al final
        if ($productCount < $limit) {
            break;
        }

        // Incrementa el número de página para la siguiente solicitud
        $page++;
    } else {
        echo 'Error al decodificar la respuesta JSON.';
        exit();
    }
} while (true);

// Muestra la cantidad total de productos
echo 'Cantidad total de productos: ' . $totalProducts;

// Función para enviar datos a Salesmanago en lotes de 100 productos
function sendToSalesmanago($productsBatch) {
    $apiKey = 'qkpuNqqrGIfgrNtuveCMegDo34Frc9Icr1J84X6KWhudtzYi5LWrsyIoAygH2qF5';
    $apiUrl = 'https://api.salesmanago.com/v3/product/upsert';

    // Datos para Salesmanago
    $salesmanagoData = array(
        "catalogId" => "f8ece8dd-9425-488a-b2ab-2690001c7e58",
        "products" => $productsBatch
    );

    // Inicializar cURL
    $ch = curl_init();

    // Configurar opciones de cURL
    curl_setopt($ch, CURLOPT_URL, $apiUrl);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true); // Configurar para POST
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($salesmanagoData)); // Enviar datos en formato JSON
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'API-KEY: ' . $apiKey,
        'Content-Type: application/json'
    ));

    // Ejecutar la solicitud y obtener la respuesta
    $response = curl_exec($ch);

    // Verificar si hubo algún error con la solicitud
    if (curl_errno($ch)) {
        echo 'Error: ' . curl_error($ch);
    } else {
        // Decodificar la respuesta JSON
        $responseData = json_decode($response, true);
        // Imprimir la respuesta para depuración
        echo '<h3>Respuesta de Salesmanago:</h3>';
        echo '<pre>';
        print_r($responseData);
        echo '</pre>';
    }

    // Cerrar la sesión de cURL
    curl_close($ch);
}

// Dividir los datos en lotes de 100 productos y enviarlos
$batchSize = 100;
$products = $salesmanagoData['products'];
$totalBatches = ceil(count($products) / $batchSize);

for ($i = 0; $i < $totalBatches; $i++) {
    $start = $i * $batchSize;
    $batch = array_slice($products, $start, $batchSize);
    sendToSalesmanago($batch);
}
    }
    
}
