/* global angular, moment, page_title */

// Controlador para listar tarifas
angular.module("app").controller('TarifasPaseCtrl', [
    '$scope',
    '$window',
    'TarifasService',
    function ($scope, $window, TarifasService) {
        $window.document.title = page_title + " :: Configuración de Tarifas por Pase";
        
        // Inicialización de variables
        $scope.tarifas = [];
        $scope.modalidades = [];
        $scope.filtros = {
            modalidad_id: 'C',
            status: 1
        };
        $scope.loading = false;
        
        // Función para cargar modalidades
        function cargarModalidades() {
            TarifasService.getModalidades()
                .then(function(response) {
                    $scope.modalidades = response.modalidades || [];
                    $scope.cargarTarifas();
                })
                .catch(function(error) {
                    mostrarError('Error al cargar modalidades: ' + error.message);
                });
        }
        
        // Función para cargar tarifas
        $scope.cargarTarifas = function() {
            $scope.loading = true;
            
            TarifasService.getAllTarifas($scope.filtros)
                .then(function(response) {
                    $scope.tarifas = response.tarifas || [];
                    
                    if ($scope.tarifas.length === 0) {
                        mostrarInfo('No se encontraron tarifas configuradas');
                    }
                })
                .catch(function(error) {
                    mostrarError('Error al cargar tarifas: ' + error.message);
                })
                .finally(function() {
                    $scope.loading = false;
                });
        };
        
        // Función para eliminar una tarifa
        $scope.eliminarTarifa = function(tarifa) {
            if (confirm('¿Está seguro de eliminar esta tarifa? Esta acción no se puede deshacer.')) {
                $scope.loading = true;
                
                TarifasService.deleteTarifa(tarifa.id)
                    .then(function(response) {
                        mostrarExito('Tarifa eliminada correctamente');
                        $scope.cargarTarifas();
                    })
                    .catch(function(error) {
                        mostrarError('Error al eliminar tarifa: ' + error.message);
                    })
                    .finally(function() {
                        $scope.loading = false;
                    });
            }
        };
        
        // Funciones para mostrar notificaciones
        function mostrarError(mensaje) {
            new Noty({
                theme: 'bootstrap-v4',
                type: 'error',
                text: mensaje,
                layout: 'topRight',
                timeout: 3000
            }).show();
        }
        
        function mostrarExito(mensaje) {
            new Noty({
                theme: 'bootstrap-v4',
                type: 'success',
                text: mensaje,
                layout: 'topRight',
                timeout: 3000
            }).show();
        }
        
        function mostrarInfo(mensaje) {
            new Noty({
                theme: 'bootstrap-v4',
                type: 'info',
                text: mensaje,
                layout: 'topRight',
                timeout: 3000
            }).show();
        }
        
        // Inicialización
        cargarModalidades();
        $scope.cargarTarifas();
    }
]);

// Controlador para agregar tarifa
angular.module("app").controller('TarifasPaseAgregarCtrl', [
    '$scope',
    '$window',
    '$state',
    'TarifasService',
    function ($scope, $window, $state, TarifasService) {
        $window.document.title = page_title + " :: Agregar Tarifa por Pase";
        
        // Inicialización de variables
        $scope.tarifa = {
            modalidad_id: 'C',
            importe: null,
            descripcion: ''
        };
        $scope.modalidades = [];
        $scope.loading = false;
        
        // Función para cargar modalidades
        function cargarModalidades() {
            TarifasService.getModalidades()
                .then(function(response) {
                    $scope.modalidades = response.modalidades || [];
                })
                .catch(function(error) {
                    mostrarError('Error al cargar modalidades: ' + error.message);
                });
        }
        
        // Función para guardar tarifa
        $scope.guardarTarifa = function() {
            if (!validarFormulario()) {
                return;
            }
            
            $scope.loading = true;
            
            TarifasService.addTarifa($scope.tarifa)
                .then(function(response) {
                    mostrarExito('Tarifa agregada correctamente');
                    $state.go('main.tarifas_pase');
                })
                .catch(function(error) {
                    mostrarError('Error al guardar tarifa: ' + error.message);
                })
                .finally(function() {
                    $scope.loading = false;
                });
        };
        
        // Función para validar formulario
        function validarFormulario() {
            
            if (!$scope.tarifa.importe || $scope.tarifa.importe <= 0) {
                mostrarError('El importe debe ser mayor a cero');
                return false;
            }
            
            return true;
        }
        
        // Función para cancelar
        $scope.cancelar = function() {
            $state.go('main.tarifas_pase');
        };
        
        // Funciones para mostrar notificaciones
        function mostrarError(mensaje) {
            new Noty({
                theme: 'bootstrap-v4',
                type: 'error',
                text: mensaje,
                layout: 'topRight',
                timeout: 3000
            }).show();
        }
        
        function mostrarExito(mensaje) {
            new Noty({
                theme: 'bootstrap-v4',
                type: 'success',
                text: mensaje,
                layout: 'topRight',
                timeout: 3000
            }).show();
        }
        
        // Inicialización
        cargarModalidades();
    }
]);

// Controlador para editar tarifa
angular.module("app").controller('TarifasPaseEditarCtrl', [
    '$scope',
    '$window',
    '$state',
    '$stateParams',
    'TarifasService',
    function ($scope, $window, $state, $stateParams, TarifasService) {
        $window.document.title = page_title + " :: Editar Tarifa por Pase";
        
        // Inicialización de variables
        $scope.tarifa = {
            id: null,
            modalidad_id: null,
            importe: null,
            descripcion: ''
        };
        $scope.modalidades = [];
        $scope.loading = false;
        
        // Verificar que se reciba un ID
        if (!$stateParams.id) {
            mostrarError('No se especificó el ID de la tarifa a editar');
            $state.go('main.tarifas_pase');
            return;
        }
        
        // Función para cargar modalidades
        function cargarModalidades() {
            TarifasService.getModalidades()
                .then(function(response) {
                    $scope.modalidades = response.modalidades || [];
                    cargarTarifa();
                })
                .catch(function(error) {
                    mostrarError('Error al cargar modalidades: ' + error.message);
                });
        }
        
        // Función para cargar datos de la tarifa
        function cargarTarifa() {
            $scope.loading = true;
            
            TarifasService.getTarifaById($stateParams.id)
                .then(function(response) {
                    $scope.tarifa = response.tarifa || {};
                    if (!$scope.tarifa.id || $scope.tarifa.modalidad_id != 'C') {
                        $scope.tarifa.modalidad_id = 'C';
                    }
                })
                .catch(function(error) {
                    mostrarError('Error al cargar la tarifa: ' + error.message);
                    $state.go('main.tarifas_pase');
                })
                .finally(function() {
                    $scope.loading = false;
                });
        }
        
        // Función para actualizar tarifa
        $scope.actualizarTarifa = function() {
            if (!validarFormulario()) {
                return;
            }
            
            $scope.loading = true;
            
            TarifasService.updateTarifa($scope.tarifa)
                .then(function(response) {
                    mostrarExito('Tarifa actualizada correctamente');
                    $state.go('main.tarifas_pase');
                })
                .catch(function(error) {
                    mostrarError('Error al actualizar tarifa: ' + error.message);
                })
                .finally(function() {
                    $scope.loading = false;
                });
        };
        
        // Función para validar formulario
        function validarFormulario() {
            if (!$scope.tarifa.importe || $scope.tarifa.importe <= 0) {
                mostrarError('El importe debe ser mayor a cero');
                return false;
            }
            
            return true;
        }
        
        // Función para cancelar
        $scope.cancelar = function() {
            $state.go('main.tarifas_pase');
        };
        
        // Funciones para mostrar notificaciones
        function mostrarError(mensaje) {
            new Noty({
                theme: 'bootstrap-v4',
                type: 'error',
                text: mensaje,
                layout: 'topRight',
                timeout: 3000
            }).show();
        }
        
        function mostrarExito(mensaje) {
            new Noty({
                theme: 'bootstrap-v4',
                type: 'success',
                text: mensaje,
                layout: 'topRight',
                timeout: 3000
            }).show();
        }
        
        // Inicialización
        cargarModalidades();
    }
]);