<?php

namespace App\Http\Controllers;

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

class OrdersController extends Controller
{
    protected $salesmanago;
    
    public function __construct(SalesmanagoService $salesmanago)
    {
        $this->salesmanago = $salesmanago;
    }
    
    public function insertOrders()
    {
        $numero = 1;
        $login = 'ad40bca92866e41e0356b0822f7309fd';
        $authtoken = 'f8b479a92d578f431bb906173df8f2f5';
        
        $url = 'https://api.jumpseller.com/v1/orders/count.json';
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
        curl_setopt($ch, CURLOPT_USERPWD, $login . ":" . $authtoken);
        $conteo = json_decode(curl_exec($ch));
        $conteo = $conteo->count;
        $veces = ceil($conteo / 100);
        curl_close($ch);
        
        echo "Total de pedidos: ".$conteo;
        echo "<br>";
        /*echo "Número de páginas: ".$veces;
        echo "<br>";*/
        $batchContacts = [];
//RESCATAR TODOS LOS PEDIDOS REALIZADOS EN JUMPSELLER Y CON ESTADO PAGADO 
        for ($i = 1; $i <= $veces; $i++) {
           // https://api.jumpseller.com/v1/orders/status/{status}.json
            $url = 'https://api.jumpseller.com/v1/orders/status/paid.json?limit=100&page=' . $i;
            echo "<br>";
            $ch = curl_init($url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
            curl_setopt($ch, CURLOPT_USERPWD, $login . ":" . $authtoken);
            $result = json_decode(curl_exec($ch));
            curl_close($ch);
            
//RESCATAR CORREO Y TAMBIEN ID DE CLIENTE DESDE JUMPSELLER
            foreach ($result as $order) {
                echo "<br><br><br><br>Dato " . $numero . "<br>";
                $numero++;
                // Acceder al id de la orden
                echo "Pedido: " . $order->order->id . "<br>";
                // Acceder al email del cliente
                echo "Email del cliente: " . $order->order->customer->email . "<br>";
                $salesmanagoData = array(
                    'clientId'      => env('SALESMANAGO_CLIENT_ID'),
                    'apiKey'        => env('SALESMANAGO_API_KEY'),
                    'requestTime'   => round(microtime(true) * 1000),
                    'sha'           => env('SALESMANAGO_SHA'),
                    'owner'         => env('SALESMANAGO_OWNER'),
                    'email'         => array($order->order->customer->email),
                );
                $url = "https://www.salesmanago.com/api/contact/basic";
                
                // 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_POST, true); // Configurar para POST
                curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($salesmanagoData)); // Enviar datos en formato JSON
                curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                    '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);
                    
                    // Comprobar si 'contacts' está presente en el array y es un array
                    if (isset($responseData['contacts']) && is_array($responseData['contacts'])) {
                        // Recorrer cada contacto en el array 'contacts'
                        foreach ($responseData['contacts'] as $contact) {
                            // Comprobar si 'contactId' está presente en el array del contacto
                            if (isset($contact['contactId'])) {
                                echo 'contactId: ' . $contact['contactId'] . "\n";
                                
                                $salesmanagoData = array(
                                    'clientId'      => env('SALESMANAGO_CLIENT_ID'),
                                    'apiKey'        => env('SALESMANAGO_API_KEY'),
                                    'requestTime'   => round(microtime(true) * 1000),
                                    'sha'           => env('SALESMANAGO_SHA'),
                                    'owner'         => env('SALESMANAGO_OWNER'),
                                    'contactId'     => array($contact['contactId']),
                                );
                                
                                $url = "https://www.salesmanago.com/api/contact/listById";
                                
                                // 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_POST, true); // Configurar para POST
                                curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($salesmanagoData)); // Enviar datos en formato JSON
                                curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                                    '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 {
                                    // Verificar si la respuesta es válida
                                    if ($response === false) {
                                        echo 'Error: No se recibió respuesta de cURL.';
                                    } else {
                                        // Decodificar la respuesta JSON
                                        $responseData = json_decode($response, true);
                        
                                        if (json_last_error() !== JSON_ERROR_NONE) {
                                            echo 'Error: Fallo al decodificar JSON - ' . json_last_error_msg();
                                        } else {
                                            
                                            // Comprobar si 'contacts' está presente y contiene datos
                                            if (isset($responseData['contacts']) && is_array($responseData['contacts'])) {
                                                // Supongamos que estamos interesados en el primer contacto
                                                $contact = $responseData['contacts'][0];
                                            
                                                // Verificar si 'contactExtEvents' está presente en el contacto
                                                if (isset($contact['contactExtEvents']) && is_array($contact['contactExtEvents'])) {
                                                    // Comprobar si 'contactExtEvents' no está vacío
                                                    if (!empty($contact['contactExtEvents'])) {
                                                        // Suponiendo que $contact['contactExtEvents'] contiene la respuesta proporcionada
                                                        $contactExtEvents = $contact['contactExtEvents'];  // Extrae el array de eventos
                                                        echo "<h3>External IDs:</h3>";
                                                        // Itera sobre cada evento en 'contactExtEvents'
                                                        $variable = 0;
                                                        foreach ($contactExtEvents as $event) {
                                                            // Verifica si 'externalId' está presente en el evento
                                                            if (isset($event['externalId'])) {
                                                                if($event['externalId'] == $order->order->id){
                                                                    echo "El pedido ".$order->order->id." ya fue insertado con el id externo: ".$event['externalId']."<br>";
                                                                    $variable = $variable +1;
                                                                }
                                                            } else {
                                                                echo "<li>External ID no encontrado para este evento.</li>";
                                                            }
                                                        }
                                                        if($variable > 0){
                                                            echo "no existen pedidos por insertar";
                                                        }
                                                        else{
                                                            echo "el pedido: ".$order->order->id." aún no ha sido insertado";
                                                            if (isset($order->order->products) && is_array($order->order->products)) {
                                                                $productIds = [];
                                                                foreach ($order->order->products as $product) {
                                                                    $productIds[] = $product->id;
                                                                }
                                                                // Construir la cadena de IDs separadas por comas
                                                                $productsString = implode(', ', $productIds);
                                                            }
                                                            // Supongamos que $fecha_str es tu cadena de fecha
                                                            $fecha_str = $order->order->created_at; // o de donde sea que provenga la fecha
                                                            $fecha = new \DateTime($fecha_str, new \DateTimeZone('UTC'));
                                                
                                                            // Obtener el timestamp en segundos y luego convertirlo a milisegundos
                                                            $timestamp_segundos = $fecha->getTimestamp();
                                                            $fecha_milisegundos = $timestamp_segundos * 1000;
                                                            // Preparar los datos para agregar un evento externo
                                                            $salesmanagoEventData = array(
                                                                "clientId" => env('SALESMANAGO_CLIENT_ID'),
                                                                "apiKey" => env('SALESMANAGO_API_KEY'),
                                                                "requestTime" => round(microtime(true) * 1000),
                                                                "sha" => env('SALESMANAGO_SHA'),
                                                                "owner" => env('SALESMANAGO_OWNER'),
                                                                "email" => $order->order->customer->email,
                                                                "contactEvent" => array(
                                                                    "date" => $fecha_milisegundos,  // Timestamp en milisegundos
                                                                    "contactExtEventType" => "PURCHASE",
                                                                    "products" => $productsString,
                                                                    "value" => $order->order->total,
                                                                    "location" => "examplecom",
                                                                    "externalId" => $order->order->id,
                                                                    "detail1" => $order->order->status,
                                                                )
                                                            );
                            
                                                            $url = "https://www.salesmanago.com/api/v2/contact/addContactExtEvent";
                            
                                                            // 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_POST, true); // Configurar para POST
                                                            curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($salesmanagoEventData)); // Enviar datos en formato JSON
                                                            curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                                                                '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 al agregar el evento externo: ' . curl_error($ch);
                                                            } else {
                                                                // Decodificar la respuesta JSON
                                                                $responseData = json_decode($response, true);
                            
                                                                // Imprimir la respuesta para depuración
                                                                echo '<h3>Respuesta de Salesmanago al agregar el evento externo:</h3>';
                                                                echo '<pre>';
                                                                print_r($responseData);
                                                                echo '</pre>';
                                                            }
                                                            
                                                            // Cerrar cURL
                                                            curl_close($ch);
                                                        }
                                                        
                                                    } else {
                                                    //SI NO ENCUENTRA NINGUN EVENTO EXTERNO ENTONCES DIRECTAMENTE INSERTA EL PEDIDO
                                                        if (isset($order->order->products) && is_array($order->order->products)) {
                                                            $productIds = [];
                                                            foreach ($order->order->products as $product) {
                                                                $productIds[] = $product->id;
                                                            }
                                                            // Construir la cadena de IDs separadas por comas
                                                            $productsString = implode(', ', $productIds);
                                                        }
                                                        // Supongamos que $fecha_str es tu cadena de fecha
                                                        $fecha_str = $order->order->created_at; // o de donde sea que provenga la fecha
                                                        $fecha = new \DateTime($fecha_str, new \DateTimeZone('UTC'));
                                            
                                                        // Obtener el timestamp en segundos y luego convertirlo a milisegundos
                                                        $timestamp_segundos = $fecha->getTimestamp();
                                                        $fecha_milisegundos = $timestamp_segundos * 1000;
                                                        // Preparar los datos para agregar un evento externo
                                                        $salesmanagoEventData = array(
                                                            "clientId" => env('SALESMANAGO_CLIENT_ID'),
                                                            "apiKey" => env('SALESMANAGO_API_KEY'),
                                                            "requestTime" => round(microtime(true) * 1000),
                                                            "sha" => env('SALESMANAGO_SHA'),
                                                            "owner" => env('SALESMANAGO_OWNER'),
                                                            "email" => $order->order->customer->email,
                                                            "contactEvent" => array(
                                                                "date" => $fecha_milisegundos,  // Timestamp en milisegundos
                                                                "contactExtEventType" => "PURCHASE",
                                                                "products" => $productsString,
                                                                "value" => $order->order->total,
                                                                "location" => "examplecom",
                                                                "externalId" => $order->order->id,
                                                                "detail1" => $order->order->status,
                                                            )
                                                        );
                        
                                                        $url = "https://www.salesmanago.com/api/v2/contact/addContactExtEvent";
                        
                                                        // 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_POST, true); // Configurar para POST
                                                        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($salesmanagoEventData)); // Enviar datos en formato JSON
                                                        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                                                            '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 al agregar el evento externo: ' . curl_error($ch);
                                                        } else {
                                                            // Decodificar la respuesta JSON
                                                            $responseData = json_decode($response, true);
                        
                                                            // Imprimir la respuesta para depuración
                                                            echo '<h3>Respuesta de Salesmanago al agregar el evento externo:</h3>';
                                                            echo '<pre>';
                                                            print_r($responseData);
                                                            echo '</pre>';
                                                        }
                                                        
                                                        // Cerrar cURL
                                                        curl_close($ch);
                                                    }
                                                } else {
                                                    echo 'El campo contactExtEvents no está presente en el contacto.';
                                                }
                                            } else {
                                                echo 'No se encontraron contactos.';
                                            }
                                            
                                            echo '</pre>';
                                        }
                                    }
                                }
                                
                                // Cerrar cURL
                                curl_close($ch);
                            }
                        }
                    } else {
                        echo 'No se encontraron contactos.';
                    }
                    
                    echo '</pre>';
                }
                
                // Cerrar cURL
                curl_close($ch);
            }
        }
    }
}
