<?php

namespace App\Http\Controllers;

use App\Custom\SQLConnection;
use App\Custom\Misc;
use Illuminate\Support\Facades\Request;
use Illuminate\Support\Facades\Session;

class BlueApiController extends Controller {
    // FUNCION ENCARGADA DE DEVOLVER LOS DATOS DE LOS PRODUCTOS DE API PARA ARMAR EL FANCY
    public function datosAPI() {
        $cliente = Request::Input("cliente") ?? null;
        //
        $resultado = SQLConnection::backendStoreProcedure('panel_control_api', array($cliente));
        //
        if (empty($resultado)) {
            return 0;
        }
        return json_encode($resultado);
    }

    // FUNCION ENCARGADA DE DEVOLVER LOS DATOS NECESARIOS PARA MOSTRAR EL FANCY DE CONSUMOS
    public function mostrarHistorial() {
        $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('/blue/modals/modal_api_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 function consultarHistorialConsumos() {
        $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($expReg1, $_POST['fecha_desde']) and Misc::validar_data($expReg1, $_POST['fecha_hasta']) 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 = 'C';
            //-------
            $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 DEVOLVER EL MODAL DE CARGAR LAS DOCUMENTACIONES
    public function modalCargarDocumentaciones() {
        $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' or $puntero->user_id == '422946826' or $puntero->user_id == '793639331') {
        //------- SI LOS DATOS RECIBIDOS SON VALIDOS
        if (Misc::validar_data($expReg, $_POST['_id_producto']) and Misc::validar_data($expReg1, $_POST['_producto'])) {
            $producto_id = $_POST['_id_producto'];
            $nombre_producto = $_POST['_producto'];
            return view('/blue/modals/modal_api_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);
        }
        //} else{
        //    //--- SINO TIENE PERMISO DE HACER MODIFICACIONES EN EL PANEL
        //    return '0';
        //}
    }
    
    // FUNCION QUE RECIBE EL FORMULARIO Y GUARDA EL ARCHIVO EN LA CARPETA ASIGNADA 
    public function guardarDocumentaciones() {
        $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';
                } else {
                    //--------------- SI NO SE PUDO GUARDAR EL ARCHIVO
                    return 'No se pudo guardar el archivo';
                }
            } elseif ($indicador_de_documentaciones == '1') {
                //-------- SI EL INDICADOR DE DOCUMENTACIONES ES 1 ENTONCES DOCUMENTACION TECNICA
                $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';
                } else {
                    //--------------- SI NO SE PUDO GUARDAR EL ARCHIVO
                    return 'No se pudo guardar el archivo';
                }
            }
            //------
        } else {
            //-------- SI LOS DATOS SON INVALIDOS
            $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';
        }
        //-----
    }

    // FUNCION QUE DEVUELVE EL MODAL QUE CONFIRMA EL CAMBIO DEL TOKEN 
    public function modalCambiarToken() {
        $puntero = Session::get('usuario');
        //--- VALIDA SI EL USUARIO TIENE PERMISO DE CAMBIAR EL TOKEN
        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' or $puntero->user_id == '422946826' or $puntero->user_id == '793639331') {
            return view("/blue/modals/modal_api_generar_token");
        } else {
            //-- SI NO TIENE PERMISO
            return '0';
        }
    }
    // FUNCION ENCARGADA DE RECIBIR LA CLAVE ANTERIOR Y VALIDARLO, GENERAR UN NUEVO TOKEN Y DAR DE BAJA EL ANTERIOR --------(en proceso)------
    public function confirmarGeneracionToken() {
        $user_id = Session::get('usuario')->user_id;
        $id_api_key = $_POST["id_clave"];
        $valores = '0123456789QWERTYUIOPASDFGHJKLZXCVBNM';
        $nuevo_token = substr(str_shuffle($valores), 0, 20);
        //
        SQLConnection::backendStoreProcedure('apikey_cambio_apikey', array($id_api_key, $nuevo_token, $user_id));
    }
    // FUNCION QUE AUTORIZA LA MODIFICACION EL REGISTRO DEL PANEL
    public function modalTopesPanel() {
        $puntero = Session::get('usuario');
        //--  VALIDA SI EL USUARIO TIENE PERMISO DE MODIFICAR REGISTRO EN EL PANEL
        //if ( $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' or $puntero->user_id == '422946826' or $puntero->user_id == '793639331'){
        // SI EL PASA EL ID ENTONCES ES PARA MODIFICAR SINO ES PARA DAR DE ALTA
        $id = Request::Input("id") ?? null;
        $cliente = Request::Input("cliente") ?? null;
        //
        $datos_cliente = SQLConnection::backendStoreProcedure("backend_datos_clientes", array($cliente), 'selectOne');
        $cliente_productos = SQLConnection::backendStoreProcedure("backend_clientes_productos", array($cliente), 'select');   //  SP de productos del cliente
        $monedas = SQLConnection::obtenerMonedas();
        $productos = SQLConnection::backendStoreProcedure("backend_clientes_productos", array($cliente), 'select');
        //
        $accion = (is_null($id)) ? 'A' : 'M';
        //
        return view("/blue/modals/modal_api_modificar_tope_panel", compact('datos_cliente', 'cliente_productos', 'accion', 'monedas', 'productos', 'cliente'));
        //} else {
        //    //-- SI NO TIENE PERMISO
        //    return '0';
        //}
    }
    public function modalTopesPanel13032024() {
        $puntero = Session::get('usuario');
        //--  VALIDA SI EL USUARIO TIENE PERMISO DE MODIFICAR REGISTRO EN EL PANEL
        if ($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' or $puntero->user_id == '422946826' or $puntero->user_id == '793639331') {
            // SI EL PASA EL ID ENTONCES ES PARA MODIFICAR SINO ES PARA DAR DE ALTA
            $id = Request::Input("id") ?? null;
            $cliente = Request::Input("cliente") ?? null;
            //
            $datos_cliente = SQLConnection::backendStoreProcedure("backend_datos_clientes", array($cliente), 'selectOne');
            $cliente_productos = SQLConnection::backendStoreProcedure("backend_clientes_productos", array($cliente), 'select');	//	SP de productos del cliente
            $monedas = SQLConnection::obtenerMonedas();
            $productos = SQLConnection::backendStoreProcedure("backend_clientes_productos", array($cliente), 'select');
            //
            $accion = (is_null($id)) ? 'A' : 'M';
            //
            return view("/blue/modals/modal_api_modificar_tope_panel", compact('datos_cliente', 'cliente_productos', 'accion', 'monedas', 'productos', 'cliente'));
        } else {
            //-- SI NO TIENE PERMISO
            return '0';
        }
    }
    // FUNCION ENCARGADA DE DAR DE ALTA UN REGISTRO APIKEY O MODIFICAR UNO
    public function confirmarDatosPanel() {
        /*
        $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;
        //
        $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',intval($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');
            $parameters = array('ALTA', intval($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);
            //
            $resultado = SQLConnection::backendStoreProcedure('apikey_abm', $parameters, '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";
    }
}