<?php namespace App\Http\Controllers;   
 
use App\Custom\Misc; 
use App\Custom\SQLConnection;
use Request;
use Session; 
use DateTime;

class ControlarApiController extends Controller {

    public static function panel_de_administracion() {
        // Se obtiene el valor del parametro 'cliente' de la solicitud o se establece como nulo si no esta presente
        $cliente = Request::Input("cliente") ?? null; 
        
        $resultado = SQLConnection::backendStoreProcedure('panel_control_api',array($cliente));
        
        // Si se obtiene un resultado valido
        if (isset($resultado)){
            // Se convierte el resultado a formato JSON
            $contenido = json_encode($resultado);    
    
            // Se retorna la vista 'panel_de_administracion' con los datos 'contenido' y 'cliente'
            return view('/control_de_apis/new/panel_de_administracion',compact("contenido","cliente"));
        }
        
        // Si no se obtiene un resultado valido
        else{
            // Se definen los datos para el control de errores
            $seccion = "ControlarApiController";
            $nombre_funcion = "panel_de_administracion";
            $mensaje = "Fallo en la variable 'resultado'";
            
            // Se llama a la funcion de control de errores
            SQLConnection::control_erores($seccion, $nombre_funcion, $mensaje);
            
            // Se retorna la vista de error 'vista_con_error'
            return view("errors/vista_con_error");
        }
    }
    
    // RETORNAR LA VIEW DE CATALOGO COMERCIAL
    public static function catalogo_comercial(){
        $resultado = SQLConnection::info_api_all();
        //-------- Condicional Para validar ------//
        if (isset($resultado)){
            $contenido = json_encode($resultado);
            return view ('control_de_apis/catologo_comercial',compact("contenido"));
        }
        //------- Si no es Valido Devuelve la vista de Error y informa a la base de datos -----//
        else{
            $seccion = "ControlarApiController";
            $nombre_funcion = "catalogo_comercial";
            $mensaje = "Fallo en la variable 'resultado'";
            SQLConnection::control_erores($seccion, $nombre_funcion, $mensaje);
            return view("errors/vista_con_error");
        }
    }

    // FUNCION QUE DEVUELVE EL MODAL DE CREAR_DEMO
    public static function devolver_modal(){
        $clave = "nombre_producto";
        $datos = Misc::borrar_datos_repetidos(SQLConnection::info_api_all(),$clave);
        return view("control_de_apis/modal_crear_demo", compact("datos"));
    }
    
    // FUNCION QUE CREAR EL TOKEN DEMO -----(en proceso)-----
    public static function crear_demo(){
        $expReg = "/[a-zA-zñÑ][^\.]+/";
        $expReg1 = "/^\d+$/";
        //--------
        if ( Misc::validar_data($expReg,$_POST["_descripcion"]) and Misc::validar_data($expReg1,$_POST["_tope"])){
            $valores = '0123456789QWERTYUIOPASDFGHJKLZXCVBNM';
            return substr(str_shuffle($valores),0,20);
        }
    }

    // FUNCION ENCARGADA DE DEVOLVER EL MODAL QUE CONFIRMA LA MODIFICACION DEL TOPE
    public static function modificar_tope(){
       return view('control_de_apis/modal_modificar_tope');
    }

    // FUNCION ENCARGADA DE VALIDAR LOS DATOS RECIBIDOS Y HACER LA MODIFICIACION DEL TOPE EN LA BASE DE DATOS ------(en proceso)------
    public static function confirmar_modificacion(){
        $expReg = "/^\d+$/";
        // $expReg1 = "/^[A-Z0-9]+$/";
        //---------------
        if (Misc::validar_data($expReg,$_POST["_tope"]) and Misc::validar_data($expReg,$_POST["id_clave"]) ){
            $tope = $_POST["_tope"];
            $clave = $_POST["id_clave"];
            $lista = [];
            array_push($lista,$clave,$tope);
            return $lista;
            //-------------
        }
        //-----FALTA REDIRIGIR BIEN LA VISTA
        else{
            $seccion = "ControlarApiController";
            $nombre_funcion = "confirmar_modificacion";
            $mensaje = "Datos invalidos";
            SQLConnection::control_erores($seccion, $nombre_funcion, $mensaje);
            return view("errors/vista_con_error");
        }
    }
    
    // FUNCION QUE DEVUELVE EL MODAL QUE CONFIRMA EL CAMBIO DEL TOKEN 
    public static function cambiar_tokenbkp(){
        $puntero = Session::get('usuario');        
        //--- VALIDA SI EL USUARIO TIENE PERMISO DE CAMBIAR EL TOKEN
        //if ( $puntero->user_id == '461605648' or $puntero->user_id == '87326631' or $puntero->user_id == '124930674' or $puntero->user_id == '608083' or $puntero->user_id == '15342812' or $puntero->user_id == '436897241' or $puntero->user_id == '16878841' or $puntero->user_id == '87455253' or $puntero->user_id == '94437923' or $puntero->user_id == '5546717' or $puntero->user_id == '28750576' or $puntero->user_id == '44240542' ){
        if(self::busquedaPermiso(Session::all()['permisos']->primarios,170)){
            return view("control_de_apis/modal_generar_token");
        }
        //-- SI NO TIENE PERMISO
        else{
            return '0';
        }
    }

    public static function cambiar_token(){
        return view("control_de_apis/modal_generar_token");       
    }
    
    // FUNCION ENCARGADA DE RECIBIR LA CLAVE ANTERIOR Y VALIDARLO, GENERAR UN NUEVO TOKEN Y DAR DE BAJA EL ANTERIOR --------(en proceso)------
    public static function confirmar_generacion_token_anterior(){
        $expReg = "/^[0-9]+$/";
        $expReg1 = "/^1$|^0$/";
        $expReg2 = "/^\d{4}-(01|02|03|04|05|06|07|08|09|10|11|12)-(01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31)$/";
        $expReg3 = "/^[0-9A-Za-z]+$/";
        //---------
        if (Misc::validar_data($expReg,$_POST["id_clave"]) ){
            $valores = '0123456789QWERTYUIOPASDFGHJKLZXCVBNM';
            $id = $_POST["id_clave"];
            return substr(str_shuffle($valores),0,20);
        }
        //-----FALTA REDIRIGIR BIEN LA VISTA
        else{
            $servidor = $_SERVER["REMOTE_ADDR"];
            $seccion = "ControlarApiController";
            $nombre_funcion = "confirmar_generacion_token";
            $mensaje = "El id de token recibido por este ip es invalido " .$servidor;
            SQLConnection::control_erores($seccion, $nombre_funcion, $mensaje);
            //return view("errors/vista_con_error");
            return 0;
        }
    }
    //
    public static function confirmar_generacion_token(){
         $user_id = Session::get('usuario')->user_id;
         $id_api_key = $_POST["id_clave"];
         $valores = '0123456789QWERTYUIOPASDFGHJKLZXCVBNM';
         $nuevo_token =  substr(str_shuffle($valores),0,20);
         //var_dump($nuevo_token); die(); 
         SQLConnection::backendStoreProcedure('apikey_cambio_apikey',array($id_api_key,$nuevo_token,$user_id));

    }

    // FUNCION QUE DEVUELVE EL MODAL DE MODIFICACIONES DEL PANEL DE ADMINISTRACION
    public static function modal_topes_panel(){
        $puntero = Session::get('usuario');
        $id = Request::Input("id") ?? null; 
        $cliente = Request::Input("cliente") ?? null; 
        
        //--  VALIDA SI EL USUARIO TIENE PERMISO DE MODIFICAR REGISTRO EN EL PANEL
        $monedas   = SQLConnection::obtenerMonedas();
        $productos = SQLConnection::backendStoreProcedure("backend_clientes_productos",array($cliente),'select'); 
        $usuarios  = SQLConnection::backendStoreProcedure("cliente_usuarios_productos",array($cliente),'select'); 
        
        return view("control_de_apis/modal_modificar_tope_panel",compact('monedas','productos','usuarios'));        
    }

    public static function modal_topes_panelbkp(){
        $puntero = Session::get('usuario');
        $id = Request::Input("id") ?? null; 
        $cliente = Request::Input("cliente") ?? null; 
        //--  VALIDA SI EL USUARIO TIENE PERMISO DE MODIFICAR REGISTRO EN EL PANEL
        if ( $puntero->user_id == '461605648' or $puntero->user_id == '87326631' or $puntero->user_id == '263767164'  or $puntero->user_id == '124930674' or $puntero->user_id == '608083' or $puntero->user_id == '15342812' or $puntero->user_id == '436897241' or $puntero->user_id == '16878841' or $puntero->user_id == '87455253' or $puntero->user_id == '94437923' or $puntero->user_id == '5546717' or $puntero->user_id == '28750576' or $puntero->user_id == '44240542'){
            $monedas   = SQLConnection::obtenerMonedas();
            $productos = SQLConnection::backendStoreProcedure("backend_clientes_productos",array($cliente),'select'); 
            $usuarios  = SQLConnection::backendStoreProcedure("cliente_usuarios_productos",array($cliente),'select'); 
            return view("control_de_apis/modal_modificar_tope_panel",compact('monedas','productos','usuarios'));
        }
        //-- SI NO TIENE PERMISO

        else{
            return '0';
        }
    }

    // FUNCION ENCARGADA DE RECIBIR LOS DATOS MODIFICADOS DEL PANEL , VALIDARLOS Y GUARDARLOS EN LA BASE DE DATOS
    public static function confirmar_datos_panel(){
        /*
        $expReg = "/^[0-9]+$/";
        $expReg1 = "/^1$|^0$/";
        $expReg2 = "/^\d{4}-(01|02|03|04|05|06|07|08|09|10|11|12)-(01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31)$/";
        $expReg3 = "/^[0-9A-Za-z]+$/";
        //----------
        if ( Misc::validar_data($expReg,$_POST["_toped"]) and Misc::validar_data($expReg,$_POST["_topem"]) and Misc::validar_data($expReg,$_POST["_topea"]) and Misc::validar_data($expReg,$_POST["tope_usuario_me"]) and Misc::validar_data($expReg,$_POST["tope_usuario_an"]) and Misc::validar_data($expReg1,$_POST["_bloquea"]) and Misc::validar_data($expReg,$_POST["id_fila"]) and Misc::validar_data($expReg,$_POST["id_user"]) and Misc::validar_data($expReg3,$_POST["api_token"]) and Misc::validar_data($expReg,$_POST["client_id"]) and Misc::validar_data($expReg1,$_POST["activo_token"])){*/
            $tope_diario = $_POST["_toped"];
            if ($tope_diario == '') {$tope_diario = 0;}
            $tope_mensual = $_POST["_topem"];
            if ($tope_mensual == '') {$tope_mensual = 0;}
            $tope_anual = $_POST["_topea"];
            if ($tope_anual == '') {$tope_anual = 0;}

            $tope_usuario_mensual = null; //$_POST["tope_usuario_me"];
            $tope_usuario_anual = null; //$_POST["tope_usuario_an"];
            
            $vigencia = $_POST["_vigencia"];
            if ($vigencia == '') {$vigencia = null;}
            $fecha_alta = $_POST["_fecha_alta"];
            if ($fecha_alta == '') {$fecha_alta = null;}
            $tope_usuario = $_POST["_bloquea"];
            if ($tope_usuario == '') {$tope_usuario = 0;}
            $id_api_key = $_POST["id_fila"] ?? null;
            if ($id_api_key == '') {$id_api_key = 0;}
            $user_id_apikey = $_POST["id_user"];
            if ($user_id_apikey == '') {$user_id_apikey = null;}
            
            $api_key = $_POST["api_token"];
            $cliente_id = $_POST["client_id"];
            
            $estado_token = $_POST["activo_token"];
            if ($estado_token == '') {$estado_token = 1;}
            $rango_ip = $_POST["rango_ip"]; 
            if ($rango_ip == '') {$rango_ip = null;}
            $moneda = $_POST["moneda"];
            if ($moneda == '') {$moneda = null;}
            $precio_unitario = $_POST["precio_unitario"];
            if ($precio_unitario == '') {$precio_unitario = null;}
            $tipo_contrato = $_POST["tipo_contrato"];
            if ($tipo_contrato == '') {$tipo_contrato = null;}
            $tipo_api = $_POST["tipo_api"];
            if ($tipo_api == '') {$tipo_api = null;}
            $codigo_producto = $_POST["codigo_producto"];
            if ($codigo_producto == '') {$codigo_producto = null;}

            $user_id = Session::get('usuario')->user_id;
            //--------------------
        /*
            echo ( var_dump('-- UPDAPIDATA:' . 'UPDAPIDATA') ) ;
            echo ( var_dump('-- $cliente_id:' . $cliente_id) ) ;
            echo ( var_dump('-- $codigo_producto:' . $codigo_producto) ) ;
            echo ( var_dump('-- 0') ) ;
            echo ( var_dump('-- 0') ) ;
            echo ( var_dump('-- 0') ) ;
            echo ( var_dump('-- 1') ) ;
            echo ( var_dump('-- null') ) ;
            echo ( var_dump('-- 1') ) ;
            echo ( var_dump('-- null') ) ;
            echo ( var_dump('-- $user_id:' . $user_id) ) ;
            echo ( var_dump('-- 1') ) ;
            echo ( var_dump('-- $id_api_key:' . $id_api_key) ) ;
            echo ( var_dump('-- $api_key:' . $api_key) ) ;
            echo ( var_dump('-- $tope_diario:' . $tope_diario) ) ;
            echo ( var_dump('-- $tope_mensual:' . $tope_mensual) ) ;
            echo ( var_dump('-- $tope_anual:' . $tope_anual) ) ;
            echo ( var_dump('-- $tope_usuario:' . $tope_usuario) ) ;
            echo ( var_dump('-- $vigencia:' . $vigencia) ) ;
            echo ( var_dump('-- $estado_token:' . $estado_token) ) ;
            echo ( var_dump('-- ALL:' . 'ALL') ) ;
            echo ( var_dump('-- $fecha_alta:' . $fecha_alta) ) ;
            echo ( var_dump('-- $tipo_api: ' . $tipo_api) ) ;
            echo ( var_dump('-- $tipo_contrato: ' . $tipo_contrato) ) ;
            echo ( var_dump('-- $moneda: ' . $moneda) ) ;
            echo ( var_dump('-- $precio_unitario: ' .  $precio_unitario) ) ;
            die(); 

            */
          
             $seccion1 = $_POST["seccion1"];
             $seccion2 = $_POST["seccion2"];
             $seccion3 = $_POST["seccion3"];
             $seccion4 = $_POST["seccion4"];
             $seccion5 = $_POST["seccion5"];
             $seccion6 = $_POST["seccion6"];
             $seccion7 = $_POST["seccion7"];
             $seccion8 = $_POST["seccion8"];
             $seccion9 = $_POST["seccion9"];
             $seccion10 = $_POST["seccion10"];
             $seccion11 = $_POST["seccion11"];

        if ($_POST["alta_modificacion"] == 'M')
        {
             SQLConnection::backendStoreProcedure('apikey_abm',array('UPDAPIDATA',$cliente_id,0,0,0,1,'','1','0',$user_id_apikey,'1',$id_api_key,$api_key,$tope_diario,$tope_mensual,$tope_anual,$tope_usuario,$vigencia,$estado_token,$rango_ip,$fecha_alta,$tipo_api,$tipo_contrato,$moneda,$precio_unitario,$user_id,'0'));
        } 
        else 
        {
         $valores = '0123456789QWERTYUIOPASDFGHJKLZXCVBNM';
         $api_key =  substr(str_shuffle($valores),0,20);
         $id_api_key = 0;   
      
         $resultado = SQLConnection::backendStoreProcedure('apikey_abm',array('ALTA',$cliente_id,0,0,0,1,'','1',$codigo_producto,$user_id_apikey,'1',$id_api_key,$api_key,$tope_diario,$tope_mensual,$tope_anual,$tope_usuario,$vigencia,$estado_token,$rango_ip,$fecha_alta,$tipo_api,$tipo_contrato,$moneda,$precio_unitario,$user_id,$codigo_producto),'SelectOne');
         $id_api_key = $resultado[0]->id_api_key; 

        }
        SQLConnection::backendStoreProcedure('apikey_secciones',array($id_api_key,'UPDATE',$user_id,$seccion1,$seccion2,$seccion3,$seccion4,$seccion5,$seccion6,$seccion7,$seccion8,$seccion9,$seccion10,$seccion11));
        return "ok"; 
        
      
    }

    // FUNCION ENCARGADA DE DEVOLVER LOS DATOS NECESARIOS PARA MOSTRAR EL FANCY DE CONSUMOS
    public static function mostrar_historial(){
        $expReg = "/^\d+$/";
        $expReg1 = "/^.+$/";
        //----
        
        if (Misc::validar_data($expReg,$_POST['_id_del_cliente']) and Misc::validar_data($expReg1,$_POST['cliente']) and Misc::validar_data($expReg,$_POST['producto_id']) and Misc::validar_data($expReg1,$_POST['producto']) ){
            $id_client = $_POST['_id_del_cliente'];
            $nombre_cliente = $_POST['cliente'];
            $id_product = $_POST['producto_id'];
            $nombre_producto = $_POST['producto'];
            // return view('control_de_apis/modal_historial_consumos',compact('id_client','nombre_cliente','id_product','nombre_producto'));
            return view('/control_de_apis/new/modal_historial_consumos',compact('id_client','nombre_cliente','id_product','nombre_producto'));
        }
        else{
            $servidor = $_SERVER['REMOTE_ADDR'];
            $seccion = 'ControlarApiController';
            $nombre_funcion = 'mostrar_historial';
            $mensaje = 'Datos invalidos recibidos por este ip '.$servidor;
            SQLConnection::control_erores($seccion,$nombre_funcion,$mensaje);
        }
    }
    
    // FUNCION ENCARGADA DE CONSULTAR LA BASE DE DATOS Y DEVOLVER LOS DATOS PARA MOSTRARLOS EN EL GRID
    public static function consultar_historial_consumos(){
        
        $filtro = isset($_POST['_filtrado'])?$_POST['_filtrado']:null;
        $expReg = "/^\d+$/";
        $expReg1 = "/^\d{4}\-(01|02|03|04|05|06|07|08|09|10|11|12)\-(01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31)$/";
        //----
        if (Misc::validar_data($expReg,$_POST['_clave_cliente']) and Misc::validar_data($expReg,$_POST['_clave_producto']) ){
            $id_cliente = $_POST['_clave_cliente'];
            $user_id = 0;
            $fecha_desde = $_POST['fecha_desde'];
            $fecha_hasta = $_POST['fecha_hasta'];
            $id_producto = $_POST['_clave_producto'];
            $tipo = 'A';
            //-------
            $params = array();
            if(intval($filtro) == 0 ){
                $params = array($id_cliente,$user_id,$fecha_desde,$fecha_hasta,$id_producto,$tipo,'T');            
            }else{
                $params = array($id_cliente,$user_id,$fecha_desde,$fecha_hasta,$id_producto,$tipo);            
            }

                
            $registros = SQLConnection::backendStoreProcedure('obtener_Registro_Consumos', $params,'select');            
            
            
            return $registros;
        }
        else{
            $servidor = $_SERVER['REMOTE_ADDR'];
            $seccion = 'ControlarApiController';
            $nombre_funcion = 'consultar_historial_consumos';
            $mensaje = 'Datos invalidos recibidos por este ip '.$servidor;
            SQLConnection::control_erores($seccion,$nombre_funcion,$mensaje);
        }
    }

    // FUNCION ENCARGADA DE CREAR EL ARCHIVO EXCEL CON LOS DATOS COMPLETOS Y DEVOLVER EL ARCHIVO PARA QUE SEA DESCARGADO
    public static function crear_excel(){
        $filtro = isset($_POST['filtra'])?$_POST['filtra']:null;
        $expReg = "/^\d{4}\-(01|02|03|04|05|06|07|08|09|10|11|12)\-(01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31)$/";
        $expReg1 = "/^\d+$/";
        $expReg2 = "/^[0-9A-Za-zñÑ\-\.\(\)\_ ]+$/";
        //---------
        if ( Misc::validar_data($expReg1,$_POST['client_id']) and Misc::validar_data($expReg1,$_POST['product_id']) and Misc::validar_data($expReg2,$_POST['cliente']) ){
            $nombre_cliente = $_POST['cliente'];
            $cliente = $_POST['client_id'];
            $user_id = 0;
            $fecha_desde = $_POST['_desde'];
            $fecha_hasta = $_POST['_hasta'];
            $producto = $_POST['product_id'];
            $tipo = 'A';
            //-------------
            $parametros = array();
            if(intval($filtro) == 0){
                $parametros = array($cliente,$user_id,$fecha_desde,$fecha_hasta,$producto,$tipo,'T');
            }else{
                $parametros = array($cliente,$user_id,$fecha_desde,$fecha_hasta,$producto,$tipo);
            }
            //-------------- HACE LA LLAMDA A LA BASE DE DATOS PARA OBTENER LOS DATOS
            $registros = SQLConnection::backendStoreProcedure('obtener_Registro_Consumos', $parametros,'select');
                        
            //--------------
            //--------------- SE COMIENZA A CREAR EL EXCEL
            $archivo = '<table border="1"><tr>';
            $archivo .= '<th>CUIT</th><th>Nombre</th><th>Fecha</th><th>Usuario</th>';
            $archivo .= '</tr>';
            //------------- SE LE AGREGA LOS DATOS QUE VIENEN DE LA BASE DE DATOS
            foreach ($registros as $clave) {
                $archivo .= '<tr>';
               /*  $archivo .= '<td>'.($clave->cuit_consultado ?? '').'</td>';
                $archivo .= '<td>'.($clave->nombre_persona ?? '').'</td>';
                $archivo .= '<td>'.($clave->fecha ?? '').'</td>';
                $archivo .= '<td>'.($clave->username ?? '').'</td>'; */
                /*$archivo .= '<td>'.($clave->national_id ?? '').'</td>';
                $archivo .= '<td>'.($clave->api_name ?? '').'</td>';
                $archivo .= '<td>'.($clave->transaction_date ?? '').'</td>';
                $archivo .= '<td>'.($clave->username ?? '').'</td>';*/

                $archivo .= '<td>'.($clave->cuit_consultado ?? '').'</td>';
                $archivo .= '<td>'.($clave->nombre_producto ?? '').'</td>';
                $archivo .= '<td>'.($clave->fecha_oculta ?? '').'</td>';
                $archivo .= '<td>'.($clave->username ?? '').'</td>';

                $archivo .= '</tr>';
            }
            //--------------
            $archivo .= '</table>';
            //--------------- SE ESPECIFICAN LOS HEADERS ENCARGADOS DE LA DESCARGA DEL ARCHIVO EXCEL
            header('Content-disposition: attachment; filename=registros_completos.xls');
		    header('Content-type: application/vnd.ms-excel; charset=utf-8');
            //------------- SE DEVUELVEN LOS DATOS DEL ARCHIVO EN FORMA DE JSON
            $archivo = utf8_decode($archivo);
            $nombre_archivo = str_replace(' ','_',$nombre_cliente).'_API_REPORT_'.date('d/m/Y').'.xls';
            //-------------
            $response = array(
                'op' => 'ok',
                'archivo' => $nombre_archivo,
                'file' => "data:application/vnd.ms-excel;base64,".base64_encode($archivo)
            );
            die(json_encode($response));
        }
        //--- SI LOS DATOS SON INVALIDOS SE AGREGAN LOS DETALLES DEL ERROR AL LOG DE ERRORES
        else{
            $servidor = $_SERVER['REMOTE_ADDR'];
            $seccion = 'ControlarApiController';
            $nombre_funcion = 'crear_excel';
            $mensaje = 'Datos invalidos recibidos por este ip '.$servidor;
            SQLConnection::control_erores($seccion,$nombre_funcion,$mensaje);
        }
    }
    // FUNCION ENCARGADA DE DEVOLVER LA DOCUMENTACION COMERCIAL DEL PRODUCTO
    public static function llamar_documentacion_comercial(){
        $expReg = "/^\d{1,3}$/";
        if (Misc::validar_data($expReg,$_POST['product_id']) and ($_POST['_indicador'] == '0' or $_POST['_indicador'] == '1' ) ){
            //------ SI LOS DATOS SON VALIDOS SE LAS ASIGNA A UNA VARIABLE AMIGABLE
            $id_producto = $_POST['product_id'];
            $indicador_de_documentaciones = $_POST['_indicador'];
            
            //--- SI EL INDICADOR ES 0 , SE LES LLEVA A LA SECCION COMERCIAL
            if ( $indicador_de_documentaciones == '0'){
                //-------- SI EL INDICADOR DE DOCUMENTACIONES ES 0 SE DEVUELVE LA DOCUMENTACION COMERCIAL
                $archivo = env('URL_DOCUMENTACION_COMERCIAL').'/'.$id_producto.'_comercial.pdf';
                //------ SI LA DOCUMENTACION COMERCIAL DEL PRODUCTO EXISTE
                if ( file_exists($archivo) ){
                    //----
                    $nombre_archivo = basename($archivo);
                    //--------
                    $contenido = file_get_contents($archivo);
                    //$contenido = implode($contenido);
                    //$contenido = utf8_decode($contenido);
                    //---------
                    $response = array(
                        'op'=> 'ok',
                        'archivo' => $nombre_archivo,
                        'file' => "data:application/pdf;base64,".base64_encode($contenido) 
                    );
                    die(json_encode($response));
                }
                //------- SI NO EXISTE LA DOCUMENTACION COMERICAL DEL PRODUCTO
                else{
                    return 'No Hay un archivo con este nombre';    
                }
            }
            //---- SI EL INDICADOR ES 1 ,SE LES LLEVA A LA SECCION TECNICA
            else{
                //-------- SI EL INDICADOR DE DOCUMENTACIONES ES 1 SE DEVUELVE LA DOCUMENTACION TECNICA
                $archivo = env('URL_DOCUMENTACION_TECNICA').'/'.$id_producto.'_tecnica.pdf';
                //------ SI LA DOCUMENTACION TECNICA DEL PRODUCTO EXISTE
                if ( file_exists($archivo) ){
                    //----
                    $nombre_archivo = basename($archivo);
                    //------
                    $contenido = file_get_contents($archivo);
                    //$contenido = implode($contenido);
                    //$contenido = utf8_decode($contenido);
                    //---------
                    $response = array(
                        'op'=> 'ok',
                        'archivo' => $nombre_archivo,
                        'file' => "data:application/pdf;base64,".base64_encode($contenido) 
                    );
                    die(json_encode($response));
                }
                //------- SI NO EXISTE LA DOCUMENTACION TECNICA DEL PRODUCTO
                else{
                    return 'No Hay un archivo con este nombre';    
                }
            }
        //-------
        }
        //------ SI LOS DATOS MANDADOS SON INVALIDOS SE ALERTA
        else{
            $servidor = $_SERVER['REMOTE_ADDR'];
            $seccion = 'ControlarApiController';
            $nombre_funcion = 'llamar_documentacion_comercial';
            $mensaje = 'Datos invalidos recibidos por este ip '.$servidor;
            SQLConnection::control_erores($seccion,$nombre_funcion,$mensaje);
        }
    }

    // FUNCION ENCARGADA DE DEVOLVER EL MODAL DE CARGAR LAS DOCUMENTACIONES
    public static function modal_cargar_documentaciones(){
        $expReg = "/^\d{1,3}$/";
        $expReg1 = "/^[A-Za-zÑñ (),-]+$/";
        $puntero = Session::get('usuario');
        //---- VALIDA SI EL USUARIO TIENE PERMISO DE HACER MODIFICACIONES EN EL PANEL
        //------- SI LOS DATOS RECIBIDOS SON VALIDOS
        if ( Misc::validar_data($expReg,$_GET['_id_producto']) and Misc::validar_data($expReg1,$_GET['_producto']) ){
            $producto_id = $_GET['_id_producto'];
            $nombre_producto = $_GET['_producto'];
            return view('control_de_apis/modal_cargar_documentaciones',compact('producto_id','nombre_producto'));
        }else{
            $servidor = $_SERVER['REMOTE_ADDR'];
            $seccion = 'ControlarApiController';
            $nombre_funcion = 'modal_cargar_documentaciones';
            $mensaje = 'Datos invalidos o archivo invalido recibidos en verbo get por este ip '.$servidor;
            SQLConnection::control_erores($seccion,$nombre_funcion,$mensaje);
        }
       
    }

    public static function modal_cargar_documentacionesbkp(){
        $expReg = "/^\d{1,3}$/";
        $expReg1 = "/^[A-Za-zÑñ (),-]+$/";
        $puntero = Session::get('usuario');
        //---- VALIDA SI EL USUARIO TIENE PERMISO DE HACER MODIFICACIONES EN EL PANEL
        if ( $puntero->user_id == '87326631' or $puntero->user_id == '124930674' or $puntero->user_id == '608083' or $puntero->user_id == '15342812' or $puntero->user_id == '436897241' or $puntero->user_id == '16878841' or $puntero->user_id == '87455253' or $puntero->user_id == '94437923' or $puntero->user_id == '5546717' or $puntero->user_id == '28750576' or $puntero->user_id == '44240542' ) {
            //------- SI LOS DATOS RECIBIDOS SON VALIDOS
            if ( Misc::validar_data($expReg,$_GET['_id_producto']) and Misc::validar_data($expReg1,$_GET['_producto']) ){
                $producto_id = $_GET['_id_producto'];
                $nombre_producto = $_GET['_producto'];
                return view('control_de_apis/modal_cargar_documentaciones',compact('producto_id','nombre_producto'));
            }
            else{
                $servidor = $_SERVER['REMOTE_ADDR'];
                $seccion = 'ControlarApiController';
                $nombre_funcion = 'modal_cargar_documentaciones';
                $mensaje = 'Datos invalidos o archivo invalido recibidos en verbo get por este ip '.$servidor;
                SQLConnection::control_erores($seccion,$nombre_funcion,$mensaje);
            }
        }
        //--- SINO TIENE PERMISO DE HACER MODIFICACIONES EN EL PANEL
        else{
            return '0';
        }
    }

    // FUNCION QUE RECIBE EL FORMULARIO Y GUARDA EL ARCHIVO EN LA CARPETA ASIGNADA 
    public static function cargar_y_guardar_documentaciones(){
        $expReg = "/^\d{1,3}$/";
        $expReg1 = "/^0$|^1$/";
        $expReg2 = "/^.+\.pdf/";
        //---------
        if (Misc::validar_data($expReg,$_POST['_id_producto']) and Misc::validar_data($expReg1,$_POST['_indicador_documentacion']) and $_FILES['_archivo']['type'] == 'application/pdf' and Misc::validar_data($expReg2,$_FILES['_archivo']['name'])  ){
            $ruta_archivo = $_FILES['_archivo']['tmp_name'];
            $id_product = $_POST['_id_producto'];
            $indicador_de_documentaciones = $_POST['_indicador_documentacion'];
            //------- SI EL INDICADOR DE DOCUMENTACIONES ES 0 ENTONCES DOCUMENTACION COMERCIAL
            if ($indicador_de_documentaciones == '0'){
                $nombre_archivo = $id_product.'_comercial.pdf';
                $ruta = env('URL_DOCUMENTACION_COMERCIAL').'/';
                //--------- SI SE PUDO GUARDAR EL ARCHIVO
                if (move_uploaded_file($ruta_archivo,$ruta.$nombre_archivo)){
                    return 'Tu archivo se cargo efectivamente';
                }
                //--------------- SI NO SE PUDO GUARDAR EL ARCHIVO
                else{
                    return 'No se pudo guardar el archivo';
                }
            }
            //-------- SI EL INDICADOR DE DOCUMENTACIONES ES 1 ENTONCES DOCUMENTACION TECNICA
            elseif ($indicador_de_documentaciones == '1'){
                $nombre_archivo = $id_product.'_tecnica.pdf';
                $ruta = env('URL_DOCUMENTACION_TECNICA').'/';
                //--------------- SI SE PUDO GUARDAR EL ARCHIVO
                if ( move_uploaded_file($ruta_archivo,$ruta.$nombre_archivo) ){
                    return 'Tu archivo se cargo efectivamente';
                }
                //--------------- SI NO SE PUDO GUARDAR EL ARCHIVO
                else{
                    return 'No se pudo guardar el archivo';
                }
            }
            //------
        }
        //-------- SI LOS DATOS SON INVALIDOS
        else{
            $servidor = $_SERVER['REMOTE_ADDR'];
            $seccion = 'ControlarApiController';
            $nombre_funcion = 'cargar_y_guardar_documentaciones';
            $mensaje = 'Datos invalidos o archivo invalido recibidos por este ip '.$servidor;
            SQLConnection::control_erores($seccion,$nombre_funcion,$mensaje);
            return 'No se pudo guardar el archivo';
        }
        //-----
    }
    //
    public static function trazabilidad_api(){
        $id_api_key = $_POST["id_api_key"];
        $resultado = SQLConnection::backendStoreProcedure('apikey_trazabilidad',array($id_api_key));
        $data = ''; 
        foreach ($resultado as $resp) {
                $data .=  $resp->trazabilidad . "\n" ; 
        }          
        return $data; 
    }
    //
    public static function secciones_api(){
        $id_api_key = $_POST["id_api_key"];
        $resultado = SQLConnection::backendStoreProcedure('apikey_secciones',array($id_api_key),'selectOne');
        return json_encode($resultado);
    }

    /* FUNCIONES NUEVAS PARA EL PANEL DE APIS */

    // FUNCION QUE DEVUELVE EL MODAL DE MODIFICACIONES
    public static function modal_topes_panel_nuevo(){
        $puntero = Session::get('usuario');
        $id = Request::Input("id") ?? null; 
        $cliente = Request::Input("cliente") ?? null; 
        
        $monedas   = SQLConnection::obtenerMonedas();
        $productos = SQLConnection::backendStoreProcedure("backend_clientes_productos",array($cliente),'select'); 
        $usuarios  = SQLConnection::backendStoreProcedure("cliente_usuarios_productos",array($cliente),'select');
         
        return view("/control_de_apis/modal_modificar",compact('monedas','productos','usuarios'));
    }

    // FUNCION QUE DEVUELVE EL MODAL DE MODIFICACIONES
    public static function modal_topes_panel_nuevobkp(){
        $puntero = Session::get('usuario');
        $id = Request::Input("id") ?? null; 
        $cliente = Request::Input("cliente") ?? null; 
        //--  VALIDA SI EL USUARIO TIENE PERMISO DE MODIFICAR REGISTRO EN EL PANEL
        //if ($puntero->user_id == '461605648' or $puntero->user_id == '87326631' or $puntero->user_id == '263767164'  or $puntero->user_id == '124930674' or $puntero->user_id == '608083' or $puntero->user_id == '15342812' or $puntero->user_id == '436897241' or $puntero->user_id == '16878841' or $puntero->user_id == '87455253' or $puntero->user_id == '94437923' or $puntero->user_id == '5546717' or $puntero->user_id == '28750576' or $puntero->user_id == '44240542'){
        if(self::busquedaPermiso(Session::all()['permisos']->primarios,169))
        {
            $monedas   = SQLConnection::obtenerMonedas();
            $productos = SQLConnection::backendStoreProcedure("backend_clientes_productos",array($cliente),'select'); 
            $usuarios  = SQLConnection::backendStoreProcedure("cliente_usuarios_productos",array($cliente),'select');
             
            return view("/control_de_apis/modal_modificar",compact('monedas','productos','usuarios'));
        }
        else{
            //-- SI NO TIENE PERMISO
            return '0';
        }        
    }

    public static function busquedaPermiso($permisos, $permisoBuscado) {
        $array_permisos = array();
        
        foreach ($permisos as $perm) {
            $item_menu = intval($perm->id_menu_item); // Convierte el id_menu_item a entero
            array_push($array_permisos, $item_menu);
        }
        
        // Convierte $permisoBuscado a entero (si es necesario) y busca en el array
        if (in_array(intval($permisoBuscado), $array_permisos)) {
            return true;
        } else {
            return false;
        }
    }
    
}