/**
 * @author arapenam
 * @since 21/01/2019
 * @version 1.0
 */
angular.module("felApp").controller('VerificarDteCtrl',
        ['$scope', '$rootScope', 'felSrv', '$alert', 'validacion', 'vcRecaptchaService', '$window', '$timeout', '$filter',
            /**
             * 
             * @param {type} $scope Contexto local
             * @param {type} $rootScope Contexto global
             * @param {type} felSrv Objeto para llamada a los servicio del API-Rest
             * @param {type} $alert Objeto para llamada a los servicios de mensajes
             * @returns {undefined}
             */
            function ($scope, $rootScope, felSrv, $alert, validacion, recaptcha, $window, $timeout, $filter) {

                var loc = document.location.href;
                $scope.parametros = {};
                $scope.parametrosDecod = {};
                if (loc.indexOf('?') > 0)
                {
                    // cogemos la parte de la url que hay despues del interrogante

                    var getString = loc.split('?')[1];
                    // obtenemos un array con cada clave=valor
                    var GET = getString.split('&');
                    // recorremos todo el array de valores
                    for (var i = 0, l = GET.length; i < l; i++) {
                        var tmp = GET[i].split('=');
                        $scope.parametros[tmp[0]] = unescape(decodeURI(tmp[1]));
                    }

                }



                $scope.gRecaptchaResponse;
                $scope.response;
                $scope.datosCaptcha = {};

                $scope.datosConsulta = {};
                $scope.datosConsulta.tipoBusqueda = "AUT";
//                $scope.datosConsulta.NumeroAutorizacion='FC3FBF8F-6CF8-4654-B06C-B2EA0340E552';
//                $scope.datosConsulta.nitEmisor='80000000131K';
//                $scope.datosConsulta.idReceptor='50510231';
//                $scope.datosConsulta.montoTotal=610.00;

                $scope.resultadoConsulta = {};
                $scope.resultadoConsulta.exito = false;
                $scope.resultadoAnulacion = false;
                $scope.estadoMensaje = true;
                $scope.existeNotas = false;
                $scope.recaptchaSize = true;
                $scope.validacionCaptcha = false;
                $scope.motivoAnulacion;
                $scope.resultadoConsultaNit = {};


                $scope.mostrarModal = function (pOpcion, nombreServicio) {
                    console.log("Ingreso a la claseMostrarModal");
                    $scope.nombreServicio = nombreServicio;
                    $scope.opcion = pOpcion;
                    var modal = document.getElementById('captchaModal');
                    modal.style.display = 'block';

                };

                $scope.cerrarModal = function () {
                    var modal = document.getElementById('captchaModal');
                    console.log("CerrarModal");
                    console.log($scope.widgetId);
                    modal.style.display = 'none';
                    grecaptcha.reset($scope.widgetId);

                };

                document.addEventListener('click', function (event) {
                     var modal = document.getElementById('captchaModal');
                    if (event.target === modal) {
                        modal.style.display = 'none';
                        grecaptcha.reset($scope.widgetId);
                    }
                });



                $scope.validarAutorizacion = function (valor) {
                    if (validacion.isNullOrEmptyOrUndefined(valor)) {
                        $alert(validacion.error("Error, debe ingresar valor."));

                    } else {
                        $scope.datosConsulta.valAutorizacion = validacion.validacionCodigoUUI(valor);
                        if (!$scope.datosConsulta.valAutorizacion) {
                            $alert(validacion.error("Error, el texto ingresado no corresponde a un número de autorización del Régimen FEL."));
                        }
                    }
                };


                $scope.validarNit = function (valor, campo) {

                    if (validacion.isNullOrEmptyOrUndefined(valor)) {
                        let mensaje = campo === 'receptor'
                                ? "Debe ingresar un NIT válido, un CUI, la palabra 'CF' o un ID EXTRANJERO del receptor que desea verificar."
                                : "Debe ingresar un NIT válido, un CUI o un ID EXTRANJERO del emisor que desea verificar.";
                        $alert(validacion.error(mensaje));
                        return false;
                    }



                    if ((campo === 'receptor' && valor.toUpperCase() === 'CF') || validacion.validacionNIT(valor) || validacion.validacionCUI(valor) || validacion.validacionExtranjero(valor)) {
                        console.log(`NIT ${campo}: ` + validacion.validacionNIT(valor));
                        console.log(`CUI ${campo}: ` + validacion.validacionCUI(valor));
                        console.log(`IDEXTRANJERO ${campo}: ` + validacion.validacionExtranjero(valor));
                        if (campo === 'receptor')
                            console.log(`Es CF: ` + (valor.toUpperCase() === 'CF'));
                        return true;
                    } else {
    
                        let mensaje = campo === 'receptor'
                                ? "El texto ingresado en el campo NIT Receptor no es un NIT válido, tampoco corresponde a un CUI, 'CF' o ID EXTRANJERO. Verifique, por favor."
                                : "El texto ingresado en el campo NIT Emisor no es un NIT válido, tampoco corresponde a un CUI o ID EXTRANJERO. Verifique, por favor.";
                        $alert(validacion.error(mensaje));
                        return false;
                    }

                };

                $scope.validarCampos = function () {
                  


                    if ($scope.datosConsulta.tipoBusqueda === "AUT" && validacion.isNullOrEmptyOrUndefined($scope.datosConsulta.NumeroAutorizacion)) {
                        $alert(validacion.error("Error, debe escribir o pegar el número de autorización del  DTE que desea verificar."));
                    } else if ($scope.datosConsulta.tipoBusqueda === "AUT" && !validacion.validacionCodigoUUI($scope.datosConsulta.NumeroAutorizacion)) {
                        $alert(validacion.error("Error, el texto ingresado no corresponde a un número de autorización del Régimen FEL."));
                    } else if ($scope.datosConsulta.tipoBusqueda === "ACC" && validacion.isNullOrEmptyOrUndefined($scope.datosConsulta.NumeroAcceso)) {
                        $alert(validacion.error("Debe escribir el número de acceso del DTE que desea verificar."));
                    } else if ($scope.datosConsulta.tipoBusqueda === "ACC" && !($scope.datosConsulta.NumeroAcceso >= 100000000 && $scope.datosConsulta.NumeroAcceso <= 999999999)) {
                        $alert(validacion.error("Error. El texto ingresado no es un Número de Acceso válido, verifique por favor."));
                    } 
                                
                    else if ($scope.validarNit($scope.datosConsulta.nitEmisor, 'emisor') && $scope.validarNit($scope.datosConsulta.idReceptor, 'receptor')) {                        
                        return true; 
                    }
                    
                    return false;
                    //console.log($scope.validarCampos);
                };



                $scope.setWidgetId = function (widgetId) {

                    // store the `widgetId` for future usage.
                    // For example for getting the response with

                    $scope.widgetId = widgetId;
                    // recaptcha.getResponse(widgetId);
                };



                $scope.setResponseCatpcha = function (response) {
                    $scope.resultadoValidacion = true;
                    $scope.responseCatpcha = response;

                };

                $scope.setResponseO = function (response, validacion) {

                    var respuestaValidacion = {
                        exito: false,
                        data: {}
                    };
                    var param = {};
                    $rootScope.mostrarPanelCargando = true;
                    param.urlServicio = '/publico/validaCaptcha';
                    param.data = response;
                    felSrv.ejecutarPeticionPost(param).then(
                            function (respuesta) {
                                $rootScope.mostrarPanelCargando = false;
                                respuestaValidacion.exito = true;
                                respuestaValidacion.data = respuesta.data.detalle[0];
                                if (respuestaValidacion.data.success) {

                                    if (validacion) {
                                        $scope.validacionCaptcha = true;
                                        $scope.verificarDte(true);

                                    }
                                    $scope.resultadoValidacion = true;

                                }
                            });

                    // send the `response` to your server for verification.
                };

                $scope.cbExpiration = function () {

                    $scope.resultadoValidacion = false;
                    // reset the 'response' object that is on scope
                };

                $scope.limpiarAutorizacion = function (pBandera) {
                    if (pBandera === 1) {
                        $scope.estadoMensaje = true;
                        $scope.recaptchaSize = true;
                        $scope.resultadoConsulta.existeDte = false;
                        $scope.resultadoConsulta = {};
                        $scope.datosConsulta.NumeroAcceso = '';
                        $scope.resultadoValidacion = false;
                    } else {
                        $scope.datosConsulta.NumeroAutorizacion = '';
                    }
                };
                $scope.inicializaMetodo = function () {


                    //$timeout(callAtTimeout,3000);

                    if (validacion.isNullOrEmptyOrUndefined($scope.parametros.emisor)) {
                        $scope.validacionCaptcha = true;
                    }

                };

                $scope.datos = {};

                $scope.verificarDte = function (consulta, validacionCaptcha) {

                    $rootScope.mostrarPanelCargando = true;

                    if (consulta) {
                        $scope.validacionCaptcha = true;
                        $scope.resultadoValidacion = true;
                        $scope.datosConsulta.tipoBusqueda = "AUT";
                        $scope.datosConsulta.NumeroAutorizacion = $scope.parametros.numero;
                        $scope.datosConsulta.nitEmisor = $scope.parametros.emisor;
                        $scope.datosConsulta.idReceptor = $scope.parametros.receptor;
                        $scope.datosConsulta.montoTotal = parseFloat($scope.parametros.monto);
                    }

                    $scope.datos = {};


                    if ($scope.validarCampos()) {
                        if ($scope.datosConsulta.tipoBusqueda === "AUT") {
                            $scope.datos.autorizacion = $scope.datosConsulta.NumeroAutorizacion;
                        } else {
                            $scope.datos.numeroAcceso = $scope.datosConsulta.NumeroAcceso;
                        }
                        $scope.datos.emisor = $scope.datosConsulta.nitEmisor;
                        $scope.datos.receptor = $scope.datosConsulta.idReceptor;
                        var monto = $scope.datosConsulta.montoTotal.toFixed(2);
                        $scope.datos.monto = monto.toString(); //

                        //console.log($scope.datos);



                        var respuestaValidacion = {
                            exito: false,
                            data: {}
                        };
                        var param = {};
                        $rootScope.mostrarPanelCargando = true;
                        param.urlServicio = '/publico/consultaDatosValidacion';
                        param.data = $scope.datos;
                        param.validacion = validacionCaptcha;
                        felSrv.ejecutarPeticionPost(param).then(
                                function (respuesta) {

                                    $rootScope.mostrarPanelCargando = false;
                                    respuestaValidacion.exito = true;
                                    $scope.resultadoConsulta = respuesta.data.detalle[0];
                                    respuestaValidacion.data = respuesta.data.detalle[0];

                                    $scope.existeNotas = validacion.isNullOrEmptyOrUndefined(respuestaValidacion.data.detalle.detalle);
                                    if (!$scope.resultadoConsulta.existeDte) {
                                        $scope.estadoMensaje = false;
                                        $scope.recaptchaSize = false;
                                        $alert(validacion.error("No existe datos con estos parametros"));
                                        // grecaptcha.reset();

                                        $scope.resultadoValidacion = false;


                                    }
                                }, function () {
                            $alert(validacion.error("Hubo Problema de comunicacion con el servicio de valida Dte"));
                            $rootScope.mostrarPanelCargando = false;

                        });

                    }
                    else{
                         $rootScope.mostrarPanelCargando = false;
                    }

                };


                $scope.nuevaConsulta = function () {
                    $scope.estadoMensaje = true;
                    $scope.recaptchaSize = true;
                    $scope.resultadoConsulta.existeDte = false;
                    $scope.resultadoConsulta = {};
                    $scope.datosCaptcha = {};
                    $scope.datosConsulta = {};
                    $scope.datosConsulta.tipoBusqueda = "AUT";
                    $scope.resultadoValidacion = false;
                    grecaptcha.reset(1);

                };

                $scope.descargarArchivo = function (pOpcion, nombreServicio, validacionCaptcha) {

                    var param = {};
                    $scope.datos.fechaHoraConsulta = $scope.resultadoConsulta.fechaHoraConsulta;
                    $scope.datos.estado = $scope.resultadoConsulta.estado;
                    param.data = $scope.datos;
                    param.validacion = validacionCaptcha;
                    param.urlServicio = '/publico/' + nombreServicio;
                    if (pOpcion === 'pdf') {
                        felSrv.ejecutarPeticionPostPdf(param).then(function (result) {
                            var file = new Blob([result.data], {type: 'application/pdf'});
                            $scope.downloadPdf(file, 1, "pdf", $scope.datos.autorizacion);

                        });
                    } else if (pOpcion === 'pdfFEL') {
                        felSrv.ejecutarPeticionPost(param).then(function (result) {
                            //  var file = new Blob([result.data], {type: 'application/pdf'});
                            const blob = felSrv.b64toBlob(result.data[0], 'application/pdf');

                            var file = result.data[0];
                            $scope.downloadPdf(blob, 1, "pdf", $scope.datos.autorizacion);

                        });
                    } else if (pOpcion === 'xml') {
                        felSrv.ejecutarPeticionPost(param).then(function (result) {

                            var file = new Blob([result.data.detalle[0]], {type: 'application/xml'});
                            $scope.downloadPdf(file, 1, "xml", $scope.datos.autorizacion);

                        });

                    }

                };



                $scope.downloadPdf = function (file, pOPcion, formato, name) {
                    var ieEDGE = navigator.userAgent.match(/Edge/g);
                    var ie = navigator.userAgent.match(/.NET/g); // IE 11+
                    var oldIE = navigator.userAgent.match(/MSIE/g);
                    var fileName = name + "." + formato;
                    var a = document.createElement("a");
                    document.body.appendChild(a);
                    a.style = "display: none";


                    if (ie || oldIE || ieEDGE) {
                        if (pOPcion === 1) {
                            window.navigator.msSaveBlob(file, fileName);
                        } else {
                            var fileURL = window.URL.createObjectURL(file);
                            $window.open(fileURL).print();
                        }
                    } else {
                        var fileURL = URL.createObjectURL(file);
                        if (pOPcion === 1) {
                            var linkDescarga = document.createElement('a');
                            linkDescarga.setAttribute('href', fileURL);
                            linkDescarga.setAttribute('download', fileName);
                            var evento = new MouseEvent("click", {
                                view: window,
                                bubbles: true,
                                cancelable: false});
                            linkDescarga.dispatchEvent(evento);
                            //linkDescarga.print();


                            /*
                             a.href = fileURL;
                             a.download = fileName;
                             a.click();*/
                        } else {
                            //var printwWindow = $window.create(fileURL);
                            //fileURL.print();
                            $window.open(fileURL).print();
                        }
                    }
                };


            }]);
     