<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Response;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Request;
use Carbon\Carbon;
use App\Custom\SQLConnection;
use App\Custom\Misc;
use DateTime;
use stdClass;
use DB;

class ApiDashboardController extends Controller
{
    /*
        Que exista, despues se mejora - TB 
    */
    public static function indexDashboardApi(){

        // Esto lo hacemos asi poque lo necesitan YA, despues se va mejorar el tema del store y los calculos - TB        
        $tiempoPromedioResp = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_TIEMPO_PROMEDIO']);        
        $solicitudesTotales = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_TOTAL_CONSULTAS']);
        $totalPromedioRespuestaGraf = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_TOTAL_CONSULTAS_GRAF']);
        $totalConsultasProductGraf = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_CONSULTAS_PRODUCT_GRAF']);
        $totalConsultasClienteGraf = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_CONSULTAS_CLIENTE_GRAF']);
        $dataCodigoRespuesta = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_CODIGO_RESP_DATA']);
        $tiempoPromedioAn = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_TIEMPO_PROM_AN']);
        $tiempoPromedioProduct = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_TIEMPO_PRODUCT']);
        $tiempoMayorMenor = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_TIEMPO_MAYOR_MENOR']);
        $rangoTiempos = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_RANGO_TIEMPO']);
       // $codResultAnual = SQLConnection::backendStoreProcedure('api_TasaErrores',[]);
        $codResultAnual = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_COD_RESULTADOS_AN']);
        $apisMasErrores = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_APIS_MAS_ERRORES']);
        $promedioConsumoApi = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_PROMEDIO_CONSUM_PROD']);
        $promedioConsumoCliente = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_PROMEDIO_CONSUM_CLIENT']);
        
        $clientesApis = SQLConnection::backendStoreProcedure('getClientesDashboardApi',[]);
        $productosApis = SQLConnection::backendStoreProcedure('getProductosDashboardApi',[]); 

        $tiempoProce =  SQLConnection::backendStoreProcedure('api_promedioTiempoProcesamiento',[]); 
        
      //  $tiempoProce =  SQLConnection::backendStoreProcedure('api_promedioTiempoProcesamiento',['mensual',3, 92, 4405537]); 
        
        //dd($tiempoProce);

        usort($clientesApis, function ($a, $b) {
            return strcasecmp($a->nombre_cliente, $b->nombre_cliente);
        });

        usort($productosApis, function ($a, $b) {
            return strcasecmp($a->nombre_producto, $b->nombre_producto);
        });
        
        
        $mesConsultado = $tiempoPromedioResp[0]->mes_consultado ?? NULL;
        $tiempoPromedioResp = $tiempoPromedioResp[0]->segundos ?? 0;                   
        $solicitudesTotales = $solicitudesTotales[0];      
        $mesboton = $mesConsultado; 
        /** reestructuramos el total para meses, errores, ok, y totales */
        $categorias = [];
        $aciertos = [];
        $errores = [];
        $totales = [];
        $total_aciertos = 0;
        $total_errores = 0;

        foreach ($totalPromedioRespuestaGraf as $dato) {
            $mesNombre = \Carbon\Carbon::createFromFormat('Y-m', $dato->mes)->translatedFormat('M'); // Mes abreviado (Ene, Feb, etc.)
            $categorias[] = $mesNombre;
            $aciertos[] = $dato->total_ok;
            $errores[] = $dato->total_error ;
            $totales[]= $dato->total_consumos;
        }
       // dd($totalPromedioRespuestaGraf);
        foreach ($aciertos as $acierto) {
            $total_aciertos += $acierto; // Suma de los aciertos
        }
        
        foreach ($errores as $error) {
            $total_errores += $error; // Suma de los errores
        
        }
        
        /**reestructuramos para totalConsultasProductGraf  */
        $producto = [];
        $total_registros = [];
        foreach ($totalConsultasProductGraf as $dato) {
            $producto[] = $dato->nombre_producto;
            $total_registros[]= $dato->total_registros;
        }

        /**reestructuramos para totalConsultasClienteGraf */
        $nombre_cliente = [];
        $consumo_total = [];
        foreach ($totalConsultasClienteGraf as $dato) {
            $nombre_cliente[] = $dato->nombre_cliente;
            $consumo_total[]= $dato->consumo_total;
        }

        /**reestructuramos para tiempoPromedioAn */
        $mes_tiempoPromedio = [];
        $promedio_duracion = [];
        foreach ($tiempoPromedioAn as $dato) {
            $mes_tiempoPromedio[] =  \Carbon\Carbon::createFromFormat('Y-m', $dato->mes)->translatedFormat('M');
            $promedio_duracion[]= $dato->promedio_duracion;
        }

        
        /**reestructuramos para dataCodigoRespuesta */
        $codigo_resultado = [];
        $cantidad_Respuesta = [];
        foreach ($dataCodigoRespuesta as $dato) {
            $codigo_resultado[] =  $dato->codigo;
            $cantidad_Respuesta[]= $dato->cantidad;
        }        

        $tiempo_api_resp = [];
        $nombre_api = [];
        foreach ($tiempoPromedioProduct as $dato) {
            $tiempo_api_resp[] =  $dato->promedio_duracion;
            $nombre_api[]= $dato->nombre_producto;
        }
    
        /**reestructuramos para rangoTiempos */
        $rango_tiempo = [];
        $cantidad_Tiempo = [];
        foreach ($rangoTiempos as $dato) {
            $rango_tiempo[] =  $dato->rango_tiempo;
            $cantidad_Tiempo[]= $dato->cantidad;
        }            
        
        $agrupado = collect($codResultAnual)
        ->pluck('mes')
        ->map(fn($mes) => \Carbon\Carbon::createFromFormat('Y-m', $mes)->format('M'))
        ->unique()
        ->values();
    
        $codigos = collect($codResultAnual)
            ->pluck('codigo_resultado')
            ->unique()
            ->values();
        
        $erroresPorMesYCodigo = [];
        
        foreach ($agrupado as $mes) {
            foreach ($codigos as $codigo) {
                $erroresPorMesYCodigo[$codigo][$mes] = 0;
            }
        }
        
        foreach ($codResultAnual as $item) {
            $mes = \Carbon\Carbon::createFromFormat('Y-m', $item->mes)->format('M');
            $codigo = $item->codigo_resultado;
            $total = $item->total_error;
        
            $erroresPorMesYCodigo[$codigo][$mes] += $total;
        }
        
        $series = [];
        foreach ($erroresPorMesYCodigo as $codigo => $data) {
            $series[] = [
                'name' => $codigo,
                'data' => array_values($data) // Asegura orden por mes
            ];
        }                    
        
        //dd($apisMasErrores);
        $nombre_producto_errores = [];
        $errores_por_tipo = [
            'Error General' => [],
            'Internal Error' => [],
            'Error Producto' => [],
            '307' => [],
            '306' => [],
            '400' => [],
            'Internal E' => []
        ];

        foreach ($apisMasErrores as $dato) {
            $nombre_producto_errores[] = $dato->nombre_producto ?? ''; 
            // Usar valores por defecto 0 si la propiedad no existe
            $errores_por_tipo['307'][] = (int)($dato->error_307 ?? 0);
            $errores_por_tipo['306'][] = (int)($dato->error_306 ?? 0);
            $errores_por_tipo['Internal Error'][] = (int)($dato->internal_error ?? 0);
            $errores_por_tipo['Internal E'][] = (int)($dato->internal_e ?? 0);
            $errores_por_tipo['Error General'][] = (int)($dato->error_general ?? 0);
            $errores_por_tipo['Error Producto'][] = (int)($dato->error_producto ?? 0);
            $errores_por_tipo['400'][] = (int)($dato->error_400 ?? 0);
        }
        

        $subtitulo = 'ÚLTIMOS 12 MESES';

        return view('dashboard-api/dashboard')->with(compact([
            'tiempoPromedioResp',
            'solicitudesTotales',
            'totalPromedioRespuestaGraf',
            'categorias',
            'aciertos',
            'errores',
            'totales',
            'total_aciertos',
            'total_errores',
            'totalConsultasProductGraf',
            'producto',
            'total_registros',
            'totalConsultasClienteGraf',
            'nombre_cliente',
            'consumo_total',
            'dataCodigoRespuesta',
            'tiempoPromedioAn',
            'mes_tiempoPromedio',
            'promedio_duracion',
            'cantidad_Respuesta',
            'codigo_resultado',
            'tiempo_api_resp',
            'nombre_api',
            'tiempoMayorMenor',
            'rangoTiempos',
            'cantidad_Tiempo',
            'rango_tiempo',
            'codResultAnual',
            'agrupado',
            'series',
            'nombre_producto_errores',
            'errores_por_tipo',
            'promedioConsumoApi',
            'promedioConsumoCliente',
            'mesConsultado',
            'clientesApis',
            'productosApis',
            'mesboton',
            'subtitulo',
            'tiempoProce'
        ]));
    }

    /* 
        Esta funcion filtra los datos de las apis por los siguientes peroidos:
        - mensual
    */
    public static function filtroPorMes(){             
        $mes = request::input('mes');

        $totalConsultasClienteGraf = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_CONSULTAS_CLIENTE_GRAF', NULL, $mes]);
        $totalConsultasProductGraf = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_CONSULTAS_PRODUCT_GRAF', NULL, $mes]);
        $tiempoPromedioResp = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_TIEMPO_PROMEDIO', NULL, $mes]);
        $solicitudesTotales = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_TOTAL_CONSULTAS', NULL, $mes]);
        $dataCodigoRespuesta = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_CODIGO_RESP_DATA', NULL, $mes]);        
        $tiempoPromedioProduct = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_TIEMPO_PRODUCT', NULL, $mes]);        
        $tiempoMayorMenor = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_TIEMPO_MAYOR_MENOR', NULL, $mes]);        
        $rangoTiempos = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_RANGO_TIEMPO', NULL, $mes]);        
        $apisMasErrores = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_APIS_MAS_ERRORES', NULL, $mes]);        
        $promedioConsumoApi = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_PROMEDIO_CONSUM_PROD', NULL, $mes]);       
        
        $promedioConsumoCliente = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_PROMEDIO_CONSUM_CLIENT', NULL, $mes]);       
       // dd($tiempoPromedioResp);
        /**reestructuramos para totalConsultasProductGraf  */
        $producto = [];
        $total_registros = [];
        if (!empty($totalConsultasProductGraf)) {
            foreach ($totalConsultasProductGraf as $dato) {
                $producto[] = $dato->nombre_producto;
                $total_registros[]= $dato->total_registros;
            }
        }              

        $mesConsultado = $tiempoPromedioResp[0]->mes_consultado ?? NULL;
        $tiempoPromedioResp = $tiempoPromedioResp[0]->segundos ?? 0;      

        $solicitudesTotales = $solicitudesTotales[0];
        
        /**reestructuramos para dataCodigoRespuesta */
        $codigo_resultado = [];
        $cantidad_Respuesta = [];
        if (!empty($dataCodigoRespuesta)) {
            foreach ($dataCodigoRespuesta as $dato) {
                $codigo_resultado[] =  $dato->codigo;
                $cantidad_Respuesta[]= $dato->cantidad;
            } 
        }
        
        
        $tiempo_api_resp = [];
        $nombre_api = [];
        if(!empty($tiempoPromedioProduct)){
            foreach ($tiempoPromedioProduct as $dato) {
                $tiempo_api_resp[] =  $dato->promedio_duracion;
                $nombre_api[]= $dato->nombre_producto;
            }
        }
        /**reestructuramos para rangoTiempos */
        $rango_tiempo = [];
        $cantidad_Tiempo = [];
        if(!empty($rangoTiempos)){
            foreach ($rangoTiempos as $dato) {
                $rango_tiempo[] =  $dato->rango_tiempo;
                $cantidad_Tiempo[]= $dato->cantidad;
            }
        }
        
        $nombre_producto_errores = [];
        $errores_por_tipo = [
            'Error General' => [],
            'Internal Error' => [],
            'Error Producto' => [],
            '307' => [],
            '306' => [],
            '400' => [],
            'Internal E' => []
        ];
        if(!empty($apisMasErrores)){
            foreach ($apisMasErrores as $dato) {
                $nombre_producto_errores[] = $dato->nombre_producto ?? ''; 
                // Usar valores por defecto 0 si la propiedad no existe
                $errores_por_tipo['307'][] = (int)($dato->error_307 ?? 0);
                $errores_por_tipo['306'][] = (int)($dato->error_306 ?? 0);
                $errores_por_tipo['Internal Error'][] = (int)($dato->internal_error ?? 0);
                $errores_por_tipo['Internal E'][] = (int)($dato->internal_e ?? 0);
                $errores_por_tipo['Error General'][] = (int)($dato->error_general ?? 0);
                $errores_por_tipo['Error Producto'][] = (int)($dato->error_producto ?? 0);
                $errores_por_tipo['400'][] = (int)($dato->error_400 ?? 0);
            }
        }
           /**reestructuramos para totalConsultasClienteGraf */
        $nombre_cliente = [];
        $consumo_total = [];
        if(!empty($totalConsultasClienteGraf)){
            foreach ($totalConsultasClienteGraf as $dato) {
                $nombre_cliente[] = $dato->nombre_cliente;
                $consumo_total[]= $dato->consumo_total;
            }
        }
        
        return response()->json([
            'productos' => $producto,
            'total_registros' => $total_registros,
            'totalConsultasProductGraf' => $totalConsultasProductGraf,
            'tiempoPromedioResp' => $tiempoPromedioResp,
            'solicitudesTotales' => $solicitudesTotales,
            'dataCodigoRespuesta' => $dataCodigoRespuesta,
            'cantidad_Respuesta' => $cantidad_Respuesta,
            'codigo_resultado' => $codigo_resultado,
            'tiempo_api_resp' => $tiempo_api_resp,
            'nombre_api' => $nombre_api,
            'tiempoMayorMenor' => $tiempoMayorMenor,
            'rangoTiempos' => $rangoTiempos,
            'cantidad_Tiempo' => $cantidad_Tiempo,
            'rango_tiempo' => $rango_tiempo,
            'nombre_producto_errores' => $nombre_producto_errores,
            'errores_por_tipo' => $errores_por_tipo,
            'promedioConsumoApi' => $promedioConsumoApi,
            'soymes' => $mesConsultado,
            'nombre_cliente' => $nombre_cliente,
            'consumo_total' => $consumo_total,
            'promedioConsumoCliente' => $promedioConsumoCliente
        ]);        
    }
    
    /* 
        Esta funcion filtra los datos de las apis por los siguientes peroidos:
        - diario
    */
    public static function filtroPeriodoApis(){    
        $periodo = "diario";         
        $mes = request::input('mes');

        $totalConsultasClienteGraf = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_CONSULTAS_CLIENTE_GRAF', $periodo]);
        $totalConsultasProductGraf = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_CONSULTAS_PRODUCT_GRAF', $periodo]);        
        $tiempoPromedioResp = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_TIEMPO_PROMEDIO', $periodo]);
        
        $solicitudesTotales = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_TOTAL_CONSULTAS', $periodo]);
        
        $dataCodigoRespuesta = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_CODIGO_RESP_DATA', $periodo]);        
        
        $tiempoPromedioProduct = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_TIEMPO_PRODUCT', $periodo]);        
        $tiempoMayorMenor = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_TIEMPO_MAYOR_MENOR', $periodo]);        
        
        $rangoTiempos = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_RANGO_TIEMPO', $periodo]);        
        $apisMasErrores = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_APIS_MAS_ERRORES', $periodo]);        
        $promedioConsumoApi = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_PROMEDIO_CONSUM_PROD', $periodo]);               
        $promedioConsumoCliente = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_PROMEDIO_CONSUM_CLIENT', $periodo]);       
    
        /**reestructuramos para totalConsultasProductGraf  */
        $producto = [];
        $total_registros = [];
        if (!empty($totalConsultasProductGraf)) {
            foreach ($totalConsultasProductGraf as $dato) {
                $producto[] = $dato->nombre_producto;
                $total_registros[]= $dato->total_registros;
            }
        }                 

        $solicitudesTotales = $solicitudesTotales[0];
        
        /**reestructuramos para dataCodigoRespuesta */
        $codigo_resultado = [];
        $cantidad_Respuesta = [];
        if (!empty($dataCodigoRespuesta)) {
            foreach ($dataCodigoRespuesta as $dato) {
                $codigo_resultado[] =  $dato->codigo;
                $cantidad_Respuesta[]= $dato->cantidad;
            } 
        }
        
        
        $tiempo_api_resp = [];
        $nombre_api = [];
        if(!empty($tiempoPromedioProduct)){
            foreach ($tiempoPromedioProduct as $dato) {
                $tiempo_api_resp[] =  $dato->promedio_duracion;
                $nombre_api[]= $dato->nombre_producto;
            }
        }
        /**reestructuramos para rangoTiempos */
        $rango_tiempo = [];
        $cantidad_Tiempo = [];
        if(!empty($rangoTiempos)){
            foreach ($rangoTiempos as $dato) {
                $rango_tiempo[] =  $dato->rango_tiempo;
                $cantidad_Tiempo[]= $dato->cantidad;
            }
        }
        
        $nombre_producto_errores = [];
        $errores_por_tipo = [
            'Error General' => [],
            'Internal Error' => [],
            'Error Producto' => [],
            '307' => [],
            '306' => [],
            '400' => [],
            'Internal E' => []
        ];
        if(!empty($apisMasErrores)){
            foreach ($apisMasErrores as $dato) {
                $nombre_producto_errores[] = $dato->nombre_producto ?? ''; 
                // Usar valores por defecto 0 si la propiedad no existe
                $errores_por_tipo['307'][] = (int)($dato->error_307 ?? 0);
                $errores_por_tipo['306'][] = (int)($dato->error_306 ?? 0);
                $errores_por_tipo['Internal Error'][] = (int)($dato->internal_error ?? 0);
                $errores_por_tipo['Internal E'][] = (int)($dato->internal_e ?? 0);
                $errores_por_tipo['Error General'][] = (int)($dato->error_general ?? 0);
                $errores_por_tipo['Error Producto'][] = (int)($dato->error_producto ?? 0);
                $errores_por_tipo['400'][] = (int)($dato->error_400 ?? 0);
            }
        }
           /**reestructuramos para totalConsultasClienteGraf */
        $nombre_cliente = [];
        $consumo_total = [];
        if(!empty($totalConsultasClienteGraf)){
            foreach ($totalConsultasClienteGraf as $dato) {
                $nombre_cliente[] = $dato->nombre_cliente;
                $consumo_total[]= $dato->consumo_total;
            }
        }

        /**para colocar el dia de hoy en la vista */
        Carbon::setLocale('es'); //para que me de el mes en español 
        $hoy = Carbon::now();

        $mesConsultado = $hoy->translatedFormat('j \d\e F');
        
        return response()->json([
            'productos' => $producto,
            'total_registros' => $total_registros,
            'totalConsultasProductGraf' => $totalConsultasProductGraf,
            'tiempoPromedioResp' => $tiempoPromedioResp,
            'solicitudesTotales' => $solicitudesTotales,
            'dataCodigoRespuesta' => $dataCodigoRespuesta,
            'cantidad_Respuesta' => $cantidad_Respuesta,
            'codigo_resultado' => $codigo_resultado,
            'tiempo_api_resp' => $tiempo_api_resp,
            'nombre_api' => $nombre_api,
            'tiempoMayorMenor' => $tiempoMayorMenor,
            'rangoTiempos' => $rangoTiempos,
            'cantidad_Tiempo' => $cantidad_Tiempo,
            'rango_tiempo' => $rango_tiempo,
            'nombre_producto_errores' => $nombre_producto_errores,
            'errores_por_tipo' => $errores_por_tipo,
            'promedioConsumoApi' => $promedioConsumoApi,
            'soymes' => $mesConsultado,
            'nombre_cliente' => $nombre_cliente,
            'consumo_total' => $consumo_total,
            'promedioConsumoCliente' => $promedioConsumoCliente
            
        ]);        
    }




    public static function filtradoDatosApis(){      
        Carbon::setLocale('es'); //para que me de el mes en español     
    
        $periodo =     Request::input('periodo') ?? NULL;
        $mes =         Request::input('mes') ?? NULL;
        $productoApi = Request::input('producto') ?? NULL;
        $cliente =     Request::input('cliente') ?? NULL;        
        $dia =         Request::input('dia') ?? NULL;
        // dd($mes);

        if ($periodo == 'periodo_mensual') {    
            $periodo = 'mensual';
            $mes = NULL;
        }elseif ($periodo == 'periodo_diario') {
            $periodo = 'diario';
        }elseif ($periodo == 'periodo_actual') {
            $periodo = 'actual';        
        }       
        
        // dd($mes);

        $solicitudesTotales = SQLConnection::backendStoreProcedure('getTotalConsultasApi', [$periodo, $mes, $productoApi, $cliente]);
        $solicitudesTotales = $solicitudesTotales[0];        


        $tiempoPromedioResp = SQLConnection::backendStoreProcedure('getTiempoPromedioApi', [$periodo, $mes, $productoApi, $cliente]);
        $tiempoPromedioResp = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_TIEMPO_PROMEDIO', $periodo, $mes, $productoApi, $cliente]);        
        $tiempoMayorMenor = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_TIEMPO_MAYOR_MENOR', $periodo, $mes, $productoApi, $cliente]);
        $promedioConsumoApi = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_PROMEDIO_CONSUM_PROD', $periodo, $mes, $productoApi, $cliente]);               
        $promedioConsumoCliente = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_PROMEDIO_CONSUM_CLIENT', $periodo, $mes, $productoApi, $cliente]); 

        $totalConsultasClienteGraf = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_CONSULTAS_CLIENTE_GRAF', $periodo, $mes, $productoApi, $cliente]);   

       // dd($cliente);
        $tiempoProce =  SQLConnection::backendStoreProcedure('api_promedioTiempoProcesamiento',[$periodo,$mes,$productoApi,$cliente]); 
      
        //$tiempoProce =  SQLConnection::backendStoreProcedure('api_promedioTiempoProcesamiento',['mensual',3, 92, 4405537]);  
        //dd($tiempoProce);
        $nombre_cliente = [];
        $consumo_total = [];
        if(!empty($totalConsultasClienteGraf)){
            foreach ($totalConsultasClienteGraf as $dato) {
                $nombre_cliente[] = $dato->nombre_cliente;
                $consumo_total[]= $dato->consumo_total;
            }
        }

        $totalConsultasProductGraf = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_CONSULTAS_PRODUCT_GRAF', $periodo, $mes, $productoApi, $cliente]);
        $producto = [];
        $total_registros = [];
        if (!empty($totalConsultasProductGraf)) {
            foreach ($totalConsultasProductGraf as $dato) {
                $producto[] = $dato->nombre_producto;
                $total_registros[]= $dato->total_registros;
            }
        }

        $dataCodigoRespuesta = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_CODIGO_RESP_DATA', $periodo, $mes, $productoApi, $cliente]);
        $codigo_resultado = [];
        $cantidad_Respuesta = [];
        if (!empty($dataCodigoRespuesta)) {
            foreach ($dataCodigoRespuesta as $dato) {
                $codigo_resultado[] =  $dato->codigo;
                $cantidad_Respuesta[]= $dato->cantidad;
            } 
        }
        
        $tiempoPromedioProduct = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_TIEMPO_PRODUCT', $periodo, $mes, $productoApi, $cliente]);
        $tiempo_api_resp = [];
        $nombre_api = [];
        if(!empty($tiempoPromedioProduct)){
            foreach ($tiempoPromedioProduct as $dato) {
                $tiempo_api_resp[] =  $dato->promedio_duracion;
                $nombre_api[]= $dato->nombre_producto;
            }
        }
        
        
        $rangoTiempos = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_RANGO_TIEMPO', $periodo, $mes, $productoApi, $cliente]);
        $rango_tiempo = [];
        $cantidad_Tiempo = [];
        if(!empty($rangoTiempos)){
            foreach ($rangoTiempos as $dato) {
                $rango_tiempo[] =  $dato->rango_tiempo;
                $cantidad_Tiempo[]= $dato->cantidad;
            }
        }        

        $apisMasErrores = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_APIS_MAS_ERRORES', $periodo, $mes, $productoApi, $cliente]);
        $nombre_producto_errores = [];
        $errores_por_tipo = [
            'Error General' => [],
            'Internal Error' => [],
            'Error Producto' => [],
            '307' => [],
            '306' => [],
            '400' => [],
            'Internal E' => []
        ];
        if(!empty($apisMasErrores)){
            foreach ($apisMasErrores as $dato) {
                $nombre_producto_errores[] = $dato->nombre_producto ?? ''; 
                // Usar valores por defecto 0 si la propiedad no existe
                $errores_por_tipo['307'][] = (int)($dato->error_307 ?? 0);
                $errores_por_tipo['306'][] = (int)($dato->error_306 ?? 0);
                $errores_por_tipo['Internal Error'][] = (int)($dato->internal_error ?? 0);
                $errores_por_tipo['Internal E'][] = (int)($dato->internal_e ?? 0);
                $errores_por_tipo['Error General'][] = (int)($dato->error_general ?? 0);
                $errores_por_tipo['Error Producto'][] = (int)($dato->error_producto ?? 0);
                $errores_por_tipo['400'][] = (int)($dato->error_400 ?? 0);
            }
        }       
        

        $totalPromedioRespuestaGraf = SQLConnection::backendStoreProcedure('BackendDashboardApi', ['GET_TOTAL_CONSULTAS_GRAF', $periodo, $mes, $productoApi, $cliente]);
        // dd($totalPromedioRespuestaGraf);
        /** reestructuramos el total para meses, errores, ok, y totales */
        $mesNombre = [];
        $categorias = [];
        $aciertos = [];
        $errores = [];
        $totales = [];
        $total_aciertos = 0;
        $total_errores = 0;
       
     //  dd($totalPromedioRespuestaGraf);
       if($periodo == 'mensual'){
        foreach ($totalPromedioRespuestaGraf as $dato) { 
            $mesNombre = \Carbon\Carbon::createFromFormat('Y-m', $dato->mes)->translatedFormat('M'); // Mes abreviado (Ene, Feb, etc.)
            $categorias[] = $mesNombre;
            $aciertos[] = $dato->total_ok;
            $errores[] = $dato->total_error ;
            $totales[]= $dato->total_consumos;
        }
       }elseif($periodo == 'diario'){
        foreach ($totalPromedioRespuestaGraf as $dato) { 
            $fecha = Carbon::createFromFormat('Y-m-d', $dato->mes);
            // Sacar el nombre del mes abreviado y el día
            $mesNombre = $fecha->translatedFormat('D d/m'); // Ej: "Abr 27"
            $categorias[] = $mesNombre;
            $aciertos[] = $dato->total_ok;
            $errores[] = $dato->total_error ;
            $totales[]= $dato->total_consumos;
        }
       }
      
        $codResultAnual = SQLConnection::backendStoreProcedure('api_TasaErrores',[$periodo, $mes, $productoApi, $cliente]);

        $campoFecha = $periodo == 'diario' ? 'dia' : 'mes';

        // Agrupar por fechas formateadas
        $agrupado = collect($codResultAnual)
            ->pluck($campoFecha)
            ->map(function ($fecha) use ($periodo) {
                return $periodo == 'diario'
                    ? Carbon::createFromFormat('Y-m-d', $fecha)->translatedFormat('D d/m') // Ej: "22 Abr"
                    : Carbon::createFromFormat('Y-m', $fecha)->translatedFormat('M');     // Ej: "Abr"
            })
            ->unique()
            ->values()
            ->all(); // <- convierte a array simple para JS
        
       // dd($agrupado); // Revisa las claves generadas
        
        // Obtener códigos únicos
        $codigos = collect($codResultAnual)
            ->pluck('codigo_resultado')
            ->unique()
            ->values()
            ->all();
        
        // Inicializar estructura de errores
        $erroresPorPeriodoYCodigo = [];
        
        foreach ($codigos as $codigo) {
            foreach ($agrupado as $fecha) {
                $erroresPorPeriodoYCodigo[$codigo][$fecha] = 0;
            }
        }
        
        // Sumar totales por código y fecha
        foreach ($codResultAnual as $item) {
            $fechaFormateada = $periodo == 'diario'
                ? Carbon::createFromFormat('Y-m-d', $item->dia)->translatedFormat('D d/m')
                : Carbon::createFromFormat('Y-m', $item->mes)->translatedFormat('M');
        
            // Debugging: Verifica el valor de fecha
           // dd($fechaFormateada); // Verifica la fecha formateada
        
            $codigo = $item->codigo_resultado;
            $total = $item->total_error;
        
            // Asegura que la fecha existe en los errores por periodo
            if (isset($erroresPorPeriodoYCodigo[$codigo][$fechaFormateada])) {
                $erroresPorPeriodoYCodigo[$codigo][$fechaFormateada] += $total;
            }
        }
        
        // Preparar series para Highcharts
        $series = [];
        
        foreach ($erroresPorPeriodoYCodigo as $codigo => $data) {
            $series[] = [
                'name' => $codigo,
                'data' => array_values($data), // Asegura el orden según agrupado
            ];
        }
        
        // Retornar la respuesta para JS
        return response()->json([
            'agrupado' => $agrupado, // etiquetas de eje X
            'series' => $series,     // datos agrupados por código
        ]);

        //dd($agrupado);
        $hoy = Carbon::yesterday();

        $mesConsultado = $hoy->translatedFormat('j \d\e F');

        $subtitulo = $periodo === 'diario' ? 'ÚLTIMOS 15 DÍAS' : 'ÚLTIMOS 12 MESES';
       //  dd($subtitulo);
        return response()->json([
            'productos' => $producto,
            'total_registros' => $total_registros,
            'totalConsultasProductGraf' => $totalConsultasProductGraf,
            'tiempoPromedioResp' => $tiempoPromedioResp,
            'solicitudesTotales' => $solicitudesTotales,
            'dataCodigoRespuesta' => $dataCodigoRespuesta,
            'cantidad_Respuesta' => $cantidad_Respuesta,
            'codigo_resultado' => $codigo_resultado,
            'tiempo_api_resp' => $tiempo_api_resp,
            'nombre_api' => $nombre_api,
            'tiempoMayorMenor' => $tiempoMayorMenor,
            'rangoTiempos' => $rangoTiempos,
            'cantidad_Tiempo' => $cantidad_Tiempo,
            'rango_tiempo' => $rango_tiempo,
            'nombre_producto_errores' => $nombre_producto_errores,
            'errores_por_tipo' => $errores_por_tipo,
            'promedioConsumoApi' => $promedioConsumoApi,
            'soymes' => $mesConsultado,
            'nombre_cliente' => $nombre_cliente,
            'consumo_total' => $consumo_total,
            'promedioConsumoCliente' => $promedioConsumoCliente,
            'periodo' => $periodo,
            'totalPromedioRespuestaGraf' => $totalPromedioRespuestaGraf,
            'categorias' => $categorias,
            'aciertos' => $aciertos,
            'errores' => $errores,
            'totales' => $totales,
            'total_aciertos' => $total_aciertos,
            'total_errores' => $total_errores,
            'subtitulo' => $subtitulo,
            'tiempoProce' => $tiempoProce,
            'agrupado' => $agrupado,
            'series' => $series

            
        ]);          

    }



    function procesarEstadisticasConsumo()
    {
        $fecha_hoy = date('Y-m-d');

        $detalle = SQLConnection::backendStoreProcedure('enriqEstadisticaConsumoDetalle');
        $resumen = SQLConnection::backendStoreProcedure('enriqEstadisticaConsumo');

        return json_encode([
            'fecha' => $fecha_hoy,   // ← esto es lo que necesitás para ver la fecha desde curl
            'detalle' => $detalle,
            'resumen' => $resumen
        ]);
    }
}
