/* global angular, moment, page_title */

angular.module("app").controller('VentasTagCtrl', [
    '$scope',
    '$window',
    'VentasTagService',
    'TagsService',
    '$timeout',
    'NumerosEconomicosService',
    function ($scope, $window, VentasTagService, TagsService, NumerosEconomicosService) {
        $window.document.title = page_title + " :: Reporte de Ventas y Recarga";
        
        // Inicialización
        $scope.filtros = {
            fecha_inicio: moment().format('YYYY-MM-DD'),
            fecha_fin: moment().format('YYYY-MM-DD'),
            tipo_movimiento: 'RECARGA',
            tag_id: null,
            numero_economico_id: null
        };
        
        $scope.moment_picker_fecha_inicio = moment();
        $scope.moment_picker_fecha_fin = moment();
        
        $scope.movimientos = [];
        $scope.total_registros = 0;
        $scope.total_monto = 0;
        $scope.loading = false;
        $scope.mensaje_error = null;
        
        // Funciones para los date pickers
        $scope.on_change_moment_picker_fecha_inicio = function (newValue) {
            console.log('Nueva fecha inicio:', newValue);
            $scope.filtros.fecha_inicio = newValue.format('YYYY-MM-DD');
        };
        
        $scope.on_change_moment_picker_fecha_fin = function (newValue) {
            console.log('Nueva fecha fin:', newValue);
            $scope.filtros.fecha_fin = newValue.format('YYYY-MM-DD');
        };
        $scope.verHistoricoRecargas = function(tag_id) {
            var url = VentasTagService.getUrlHistoricoRecargas(tag_id);
            $window.open(url, '_blank');
        };
        
        // Función principal de búsqueda
        $scope.buscarMovimientos = function () {
            $scope.loading = true;
            $scope.mensaje_error = null;
            
            // Asegurar que las fechas estén en formato correcto (YYYY-MM-DD)
            var params = {
                fecha_inicio: typeof $scope.moment_picker_fecha_inicio === 'object' ? 
                               $scope.moment_picker_fecha_inicio.format('YYYY-MM-DD') : 
                               $scope.filtros.fecha_inicio,
                fecha_fin: typeof $scope.moment_picker_fecha_fin === 'object' ? 
                            $scope.moment_picker_fecha_fin.format('YYYY-MM-DD') : 
                            $scope.filtros.fecha_fin,
                tipo_movimiento: $scope.filtros.tipo_movimiento
            };
            
            // Añadir los otros filtros opcionales si existen
            if ($scope.filtros.tag_id) params.tag_id = $scope.filtros.tag_id;
            if ($scope.filtros.numero_economico_id) params.numero_economico_id = $scope.filtros.numero_economico_id;
            
            console.log('Parámetros de búsqueda:', params);
            
            VentasTagService.getRecargasReporte(params)
                .then(function (response) {
                    $scope.movimientos = response.movimientos || [];
                    $scope.total_registros = response.total_registros || 0;
                    $scope.total_monto = response.total_monto || 0;
                    
                    if ($scope.movimientos.length === 0) {
                        mostrarMensajeInfo('No se encontraron movimientos con los criterios especificados');
                    }
                })
                .catch(function (error) {
                    console.error('Error en búsqueda:', error);
                    $scope.mensaje_error = error.message || 'Error al obtener reporte de recargas';
                    mostrarError($scope.mensaje_error);
                })
                .finally(function () {
                    $scope.loading = false;
                });
        };
        
        // Exportar a Excel
        $scope.exportarExcel = function () {
            if ($scope.movimientos.length === 0) {
                mostrarMensajeInfo('No hay datos para exportar');
                return;
            }
            
            $scope.loading = true;
            
            VentasTagService.exportarRecargasExcel($scope.filtros)
                .then(function (response) {
                    if (response.url) {
                        $window.open(response.url, '_blank');
                    } else {
                        mostrarError('Error: ' + (response.message || 'No se pudo generar el archivo Excel'));
                    }
                })
                .catch(function (error) {
                    mostrarError('Error al exportar: ' + (error.message || 'Error desconocido'));
                })
                .finally(function() {
                    $scope.loading = false;
                });
        };
        
        // Exportar a PDF
        $scope.exportarPdf = function () {
            if ($scope.movimientos.length === 0) {
                mostrarMensajeInfo('No hay datos para exportar');
                return;
            }
            
            var url = VentasTagService.getUrlExportarRecargasPdf($scope.filtros);
            $window.open(url, '_blank');
        };
        
        // Imprimir ticket
        $scope.imprimirTicket = function (id) {
            var url = VentasTagService.getUrlTicketRecarga(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');
            }
        };
        $scope.mostrarTodo = function() {
            $scope.loading = true;
            $scope.mensaje_error = null;
            
            // Llamada al servicio para obtener todos los movimientos
            VentasTagService.getAllMovimientos()
                .then(function(response) {
                    $scope.movimientos = response.movimientos || [];
                    $scope.total_registros = response.total_registros || 0;
                    $scope.total_monto = response.total_monto || 0;
                    
                    console.log('Datos obtenidos sin filtros:', $scope.movimientos);
                    
                    if ($scope.movimientos.length === 0) {
                        mostrarMensajeInfo('No se encontraron registros');
                    }
                })
                .catch(function(error) {
                    console.error('Error al obtener todos los movimientos:', error);
                    $scope.mensaje_error = error.message || 'Error al obtener datos';
                    mostrarError($scope.mensaje_error);
                })
                .finally(function() {
                    $scope.loading = false;
                });
        };
        
        // Funciones de mensajes
        function mostrarError(mensaje) {
            new Noty({
                theme: 'bootstrap-v4',
                type: 'error',
                text: mensaje,
                layout: 'topRight',
                timeout: 3000
            }).show();
        }
        
        function mostrarMensajeInfo(mensaje) {
            new Noty({
                theme: 'bootstrap-v4',
                type: 'info',
                text: mensaje,
                layout: 'topRight',
                timeout: 3000
            }).show();
        }
        
        // Iniciar con búsqueda
        $scope.buscarMovimientos();
    }
]);