/* global angular, page_title */

angular.module("app").controller('TagsRecargasCtrl', [
    '$scope',
    '$state',
    '$window',
    'TagsService',
    function ($scope, $state, $window, TagsService) {
        $window.document.title = page_title + " :: Gestor de Recargas";
        localStorage.setItem("app_last_state", JSON.stringify({state: $state.current.name, params: null}));
        
        $scope.show_list = false;
        $scope.tags_sin_saldo = [];
        $scope.tags_con_saldo = [];
        $scope.allTags = []; // Todos los TAGs (combinados)
        $scope.tagsFiltrados = []; // TAGs filtrados para mostrar
        
        // Variables para filtros
        $scope.busqueda = "";
        $scope.filtroSaldo = "todos";
        $scope.filtroAsignacion = "todos";
        
        // Función para aplicar filtros por tipo
        $scope.aplicarFiltro = function(tipo, valor) {
            if (tipo === 'saldo') {
                $scope.filtroSaldo = valor;
            } else if (tipo === 'asignacion') {
                $scope.filtroAsignacion = valor;
            }
            actualizarTabla();
        };
        
        // Función para actualizar los filtros cuando cambia la búsqueda
        $scope.actualizarFiltros = function() {
            actualizarTabla();
        };
        
        // Función que actualiza la tabla según los filtros seleccionados
        function actualizarTabla() {
            // Comenzamos con todos los TAGs
            let tagsTemp = $scope.allTags;
            
            // Aplicamos filtro de búsqueda
            if ($scope.busqueda && $scope.busqueda.trim() !== '') {
                tagsTemp = tagsTemp.filter(function(tag) {
                    // Buscar en número de TAG
                    if (tag.numero_tag && tag.numero_tag.toString().toLowerCase().includes($scope.busqueda.toLowerCase())) {
                        return true;
                    }
                    // Buscar en número económico si existe
                    if (tag.numero_economico && tag.numero_economico.toString().toLowerCase().includes($scope.busqueda.toLowerCase())) {
                        return true;
                    }
                    // Buscar en modalidad si existe
                    if (tag.modalidad_nombre && tag.modalidad_nombre.toLowerCase().includes($scope.busqueda.toLowerCase())) {
                        return true;
                    }
                    return false;
                });
            }
            
            // Aplicamos filtro de saldo
            if ($scope.filtroSaldo !== 'todos') {
                tagsTemp = tagsTemp.filter(function(tag) {
                    if ($scope.filtroSaldo === 'sin_saldo') {
                        return parseFloat(tag.saldo) === 0;
                    } else if ($scope.filtroSaldo === 'con_saldo') {
                        return parseFloat(tag.saldo) > 0;
                    }
                    return true;
                });
            }
            
            // Aplicamos filtro de asignación
            if ($scope.filtroAsignacion !== 'todos') {
                tagsTemp = tagsTemp.filter(function(tag) {
                    if ($scope.filtroAsignacion === 'sin_asignar') {
                        return !tag.numero_economico;
                    } else if ($scope.filtroAsignacion === 'asignados') {
                        return !!tag.numero_economico;
                    }
                    return true;
                });
            }
            
            // Actualizamos la lista filtrada
            $scope.tagsFiltrados = tagsTemp;
        }
        
        // Función para recargar un TAG (redirigir a la vista de recarga)
        $scope.recargarTag = function(tag) {
            $state.go('main.tag_recharge', {tag_id: tag.id});
        };
        
        // Función para imprimir el ticket de recarga
        $scope.imprimirTicket = function(tagId) {
            // Primero verificamos si hay movimientos de recarga para este TAG
            TagsService.getLastRechargeMovement(tagId)
                .then(function(response) {
                    if (response && response.movimiento && response.movimiento.id) {
                        // Si hay un movimiento, usamos la URL para imprimir el ticket
                        var url = api_url + 'ventas_tag/imprime_ticket_recarga/' + response.movimiento.id;
                        
                        // Detectar si es Android para impresora térmica
                        let ua = navigator.userAgent.toLowerCase();
                        let isAndroid = ua.indexOf("android") > -1;
                        
                        if (isAndroid) {
                            document.location = 'rawbt:url:base64,' + btoa(url);
                        } else {
                            // Abrir en nueva ventana e imprimir
                            $window.open(url, '_blank');
                        }
                    } else {
                        // Si no hay movimientos, mostramos mensaje de error
                        showNoTicketMessage();
                    }
                })
                .catch(function(error) {
                    console.error('Error al obtener el último movimiento:', error);
                    showNoTicketMessage();
                });
        };
        
        // Función para limpiar los filtros
        $scope.limpiarFiltros = function() {
            $scope.busqueda = "";
            $scope.filtroSaldo = "todos";
            $scope.filtroAsignacion = "todos";
            actualizarTabla();
        };
        
        function showNoTicketMessage() {
            new Noty({
                theme: 'bootstrap-v4',
                type: 'warning',
                text: 'No se encontraron movimientos de recarga para este TAG',
                layout: 'bottomCenter',
                timeout: 3000
            }).show();
        }
        
        // Función para cargar todos los TAGs
        function loadAllTags() {
            // Cargar los TAGs sin saldo
            TagsService.getTagsBySaldo('sin_saldo', 1)
                .then(function(response) {
                    if (response && response.tags) {
                        $scope.tags_sin_saldo = angular.copy(response.tags);
                    } else {
                        $scope.tags_sin_saldo = [];
                    }
                    
                    // Cargar los TAGs con saldo
                    return TagsService.getTagsBySaldo('con_saldo', 1);
                })
                .then(function(response) {
                    if (response && response.tags) {
                        $scope.tags_con_saldo = angular.copy(response.tags);
                    } else {
                        $scope.tags_con_saldo = [];
                    }
                    
                    // Combinar para la lista unificada
                    $scope.allTags = [].concat($scope.tags_sin_saldo, $scope.tags_con_saldo);
                    
                    // Inicializar la tabla con todos los TAGs
                    $scope.tagsFiltrados = angular.copy($scope.allTags);
                    
                    $scope.show_list = true;
                })
                .catch(function(error) {
                    console.error('Error al cargar los TAGs:', error);
                    showErrorMessage('Error al cargar los datos. Intente nuevamente.');
                });
        }
        
        function showErrorMessage(message) {
            new Noty({
                theme: 'bootstrap-v4',
                type: 'error',
                text: message,
                layout: 'bottomCenter',
                timeout: 3000
            }).show();
        }
        
        // Cargar los datos al iniciar
        loadAllTags();
    }
]);