/* global angular, page_title */

angular.module("app").controller('TagsAsignacionesCtrl', [
    '$scope',
    '$state',
    '$window',
    'TagsService',
    'NumerosEconomicosService',
    function ($scope, $state, $window, TagsService, NumerosEconomicosService) {
        $window.document.title = page_title + " :: Gestor de Asignaciones";
        localStorage.setItem("app_last_state", JSON.stringify({state: $state.current.name, params: null}));
        
        $scope.show_list = false;
        $scope.loading = false;
        $scope.tags_sin_asignar = [];
        $scope.tags_asignados = [];
        $scope.numero_economico_selected = null;
        $scope.tag_selected = null;
        $scope.numeros_economicos = [];
        
        // Filtros para la búsqueda de números económicos
        $scope.filtros = {
            numero: "",
            modalidad_id: "2", // Por defecto COLECTIVO
            estatus: "1"       // Por defecto Activos
        };
        
        // Función para cargar TAGs sin asignar y asignados
        function loadAllTags() {
            $scope.loading = true;
            
            // Primero cargamos los TAGs sin asignar
            TagsService.getTagsByAsignacion('sin_asignar', 1)
                .then(function(response) {
                    if (response && response.tags) {
                        $scope.tags_sin_asignar = angular.copy(response.tags);
                    } else {
                        $scope.tags_sin_asignar = [];
                    }
                    
                    // Luego cargamos los TAGs asignados
                    return TagsService.getTagsByAsignacion('asignados', 1);
                })
                .then(function(response) {
                    if (response && response.tags) {
                        $scope.tags_asignados = angular.copy(response.tags);
                    } else {
                        $scope.tags_asignados = [];
                    }
                    
                    $scope.show_list = true;
                    $scope.loading = false;
                })
                .catch(function(error) {
                    console.error('Error al cargar los TAGs:', error);
                    showErrorMessage('Error al cargar los datos. Intente nuevamente.');
                    $scope.loading = false;
                });
        }
        
        // Función para buscar número económico
        $scope.buscarNumeroEconomico = function() {
            if ($scope.filtros.numero) {
                $scope.loading = true;
                $scope.numeros_economicos = [];
                
                // Asegurar que modalidad_id siempre sea 2 (COLECTIVO)
                $scope.filtros.modalidad_id = "2";
                
                NumerosEconomicosService.buscarNumeroEconomico($scope.filtros)
                    .then(function(data_response) {
                        if (data_response.numeros_economicos && data_response.numeros_economicos.length > 0) {
                            $scope.numeros_economicos = data_response.numeros_economicos;
                        } else {
                            showMessage('No se encontraron números económicos con los filtros especificados', 'warning');
                        }
                    })
                    .catch(function(error) {
                        showErrorMessage(error.message || 'Error al buscar números económicos');
                    })
                    .finally(function() {
                        $scope.loading = false;
                    });
            } else {
                showMessage('Ingrese al menos un criterio de búsqueda', 'warning');
            }
        };
        
        // Función para seleccionar un TAG
        $scope.selectTag = function(tag) {
            $scope.tag_selected = angular.copy(tag);
        };
        
        // Función para remover la selección de TAG
        $scope.removeTagSelection = function() {
            $scope.tag_selected = null;
        };
        
        // Función para seleccionar un número económico
        $scope.selectNumeroEconomico = function(numero_economico) {
            $scope.numero_economico_selected = angular.copy(numero_economico);
            $scope.numeros_economicos = [];
        };
        
        // Función para remover la selección de número económico
        $scope.removeNumeroEconomicoSelection = function() {
            $scope.numero_economico_selected = null;
        };
        
        // Función para limpiar filtros
        $scope.limpiarFiltros = function() {
            $scope.filtros = {
                numero: "",
                modalidad_id: "2",
                estatus: "1"
            };
            $scope.numeros_economicos = [];
        };
        
        // Función para asignar el TAG al número económico
        $scope.asignarTagNumeroEconomico = function() {
            if (!$scope.tag_selected || !$scope.numero_economico_selected) {
                showMessage('Debe seleccionar un TAG y un número económico para realizar la asignación', 'warning');
                return;
            }
            
            var data = {
                numero_economico_id: $scope.numero_economico_selected.id,
                comentario: "Asignación desde Gestor de Asignaciones"
            };
            
            $scope.loading = true;
            
            TagsService.assignTag($scope.tag_selected.id, data)
                .then(function() {
                    showMessage('TAG asignado correctamente', 'success');
                    // Actualizar ambas listas de TAGs
                    loadAllTags();
                    // Limpiar selecciones
                    $scope.tag_selected = null;
                    $scope.numero_economico_selected = null;
                })
                .catch(function(error) {
                    showErrorMessage(error.message || 'Error al asignar el TAG');
                })
                .finally(function() {
                    $scope.loading = false;
                });
        };
        
        // Utilidades para mostrar mensajes
        function showMessage(message, type) {
            new Noty({
                theme: 'bootstrap-v4',
                type: type,
                text: message,
                layout: 'bottomCenter',
                timeout: 3000
            }).show();
        }
        
        function showErrorMessage(message) {
            showMessage(message, 'error');
        }
        
        // Inicializar cargando los TAGs
        loadAllTags();
    }
]);