var BuscarRelacionados = {
    seleccionados: {},
    init: function () {
        BuscarRelacionados.iniciarListado();
        $('#boton-mostrar-relacionados').click(function () {
            // cargamos los artículos más recientes.
            $('#query-relacionados').text('artículos más recientes.');
            $('#form-buscar-relacionados')[0].reset();
            BuscarRelacionados.cargarArticulos(false);
            // leemos los relacionados que puedan haber sido ingresados antes.
            $('#error-resultados-relacionados, #resultados-relacionados').hide();
            $('#modal-relacionados').modal();
            return false;
        });

        $('#titulares-relacionados').on('click', 'a.quitar-relacionado', function () {
            BuscarRelacionados.quitarRelacionado(this);
            return false;
        });

        $('#form-buscar-relacionados').submit(function () {
            $('#error-resultados-relacionados').hide();
            if ($('#titular-relacionados').val() != '' && $('#titular-relacionados').val().length < Admin.min_char_busqueda) {
                $('#resultados-relacionados').hide();
                $('#error-resultados-relacionados').text('El largo del texto a buscar debe ser de al menos ' + Admin.min_char_busqueda + ' caracteres.').show();
            } else {
                BuscarRelacionados.cargarArticulos(true);
            }
            return false;
        });

        // sigue un link de paginación en el modal.
        $('#links-paginacion').on('click', 'a', function () {
            $("#_ini").val($(this).data('page'));
            BuscarRelacionados.cargarArticulos(true);
            return false;
        });

        // agrega o quita un relacionado del listado. Usado en el modal.
        $('#lista-resultados-relacionados').on('click', 'a.resultado-link', function () {
            // buscamos los datos ya cargados.
            var listado = BuscarRelacionados.seleccionados;

            var ts = $(this).data('ts');
            var titular = $(this).siblings('.resultado-titular').text();
            if (typeof listado[ts] == 'undefined' || listado[ts] == '') {// lo agregamos a la lista.
                listado[ts] = titular;
                $(this).parent().find('span.resultado-agregado').addClass('fa-unlink').removeClass('fa-link');
            } else {// Ya estaba. Lo quitamos de la lista.
                delete listado[ts];
                $(this).parent().find('span.resultado-agregado').removeClass('fa-unlink').addClass('fa-link');
            }

            // rellenamos el input.
            $('#_tax').val(Object.keys(listado).join(','));

            // rellenamos el listado visible
            BuscarRelacionados.actualizarListado();

            return false;

        });
        // actualizamos el input con los relacionados al iniciar
        $('#_tax').val(Object.keys(BuscarRelacionados.seleccionados).join(','));

        BuscarRelacionados.cargaSecc();
        $("#relac_secc").on('change', BuscarRelacionados.cargaTemas);
        $("#relac_tem").on('change', BuscarRelacionados.cargaSubtemas);
    },

    cargaSecc: function () {
        let combo = document.getElementById('relac_secc');
        if (typeof (combo) == 'undefined') {
            return false;
        }

        if (CombosTax.taxonomia == null) {
            setTimeout(BuscarRelacionados.cargaSecc, 2000);
        }

        let j = 1;
        for (let i in CombosTax.taxonomia) {
            if (i != 0 && CombosTax.taxonomia[i] != null && CombosTax.taxonomia[i] != undefined) {
                combo.options[j++] = new Option(CombosTax.taxonomia[i].nombre, i);
            }
        }
    },

    cargaTemas: function () {
        if (CombosTax.taxonomia == null) {
            return;
        }
        if (document.getElementById('relac_secc').selectedIndex < 0) {
            return;
        }

        let id_seccion = document.getElementById('relac_secc').options[document.getElementById('relac_secc').selectedIndex].value;
        BuscarRelacionados.clearSelect('relac_tem');
        BuscarRelacionados.clearSelect('relac_subt');

        if (typeof (CombosTax.taxonomia[id_seccion]) !== 'undefined') {
            let i = 1;
            var temas = CombosTax.taxonomia[id_seccion]['temas'];
            let combo_temas = document.getElementById('relac_tem');
            for (var id_tema in temas) {
                combo_temas.options[i] = new Option(temas[id_tema]['nombre'], id_tema);
                i++;
            }
        }
    },

    cargaSubtemas: function () {
        if (CombosTax.taxonomia == null) {
            return;
        }
        if (document.getElementById('relac_tem').selectedIndex < 0) {
            return;
        }

        let id_tema = document.getElementById('relac_tem').options[document.getElementById('relac_tem').selectedIndex].value;
        let id_seccion = document.getElementById('relac_secc').options[document.getElementById('relac_secc').selectedIndex].value;

        BuscarRelacionados.clearSelect('relac_subt');

        if (typeof(CombosTax.taxonomia[id_seccion]['temas'][id_tema]) !== 'undefined') {
            let i = 1;
            var subtemas = CombosTax.taxonomia[id_seccion]['temas'][id_tema]['subtemas'];
            let combo_subtemas = document.getElementById('relac_subt');
            for (var id_subtema in subtemas) {
                combo_subtemas.options[i] = new Option(subtemas[id_subtema]['nombre'], id_subtema);
                i++;
            }
        }
    },

    clearSelect: function (combo_id) {
        let objcombo = document.getElementById(combo_id);
        let len = objcombo.options.length;
        for (let i = (len - 1); i > 0; i--) {
            objcombo.options[i] = null;
        }
    },

    // consulta a cgi por los artículos buscados
    cargarArticulos: function (search) {
        $.ajax({
            url: '/cgi-cpn/buscador_relacionados/prontus_buscar_relacionados.cgi',
            type: 'get',
            dataType: 'json',
            data: $('#form-buscar-relacionados').serializeArray()
        })
            .done(function (json, textStatus) {
                if (json.status == '1') {
                    $('#pagina-n').text(json.resultados.curr_page);
                    $('#paginas-totales').text(json.resultados.paginas);
                    if (search) {
                        $('#query-relacionados').text('"' + json.query + '"');
                    } else {
                        $('#query-relacionados').text('artículos más recientes');
                    }
                    $('#lista-resultados-relacionados').empty();
                    if (json.resultados.filas) {
                        var template = '';
                        var listado = BuscarRelacionados.seleccionados;
                        var listadoResultados = $('#lista-resultados-relacionados');
                        for (var i = 0; i < json.resultados.filas.length; i++) {
                            template = $('#resultado-template').clone();
                            var fila = json.resultados.filas[i];
                            fila.art_ts = '' + fila.art_ts;
                            template.children('span.resultado-titular').text(fila.art_titu_minitext);
                            template.children('a.resultado-link').attr('data-ts', fila.art_ts);
                            template.children('span.resultado-tipo').text(fila.art_tipo);

                            if (typeof listado[fila.art_ts] == 'undefined' || listado[fila.art_ts] == '') {
                                template.find('span.resultado-agregado').addClass('fas fa-link');
                            } else {
                                template.find('span.resultado-agregado').addClass('fas fa-unlink');
                            }
                            listadoResultados.append(template);
                        }
                    }
                    $('#cantidad-resultados').text(json.resultados.total == 1 ? '1 artículo encontrado' :
                        json.resultados.total + ' artículos encontrados');
                    if (json.resultados.paginas < 2) {
                        $('#paginacion-relacionados').hide();
                    } else {
                        $('#pagina-anterior').data('page', json.resultados.prev_page);
                        $('#pagina-siguiente').data('page', json.resultados.next_page);
                        $('#pagina-final').data('page', json.resultados.last_page);
                        $('#paginacion-relacionados').show();
                    }
                    $('#resultados-relacionados').show();
                } else if (json.status == '0') {
                    $('#error-resultados-relacionados').text(json.msg).show();
                    $('#resultados-relacionados').hide();
                }
            })
            .fail(function (jqXHR, textStatus, errorThrown) {
                $('#error-resultados-relacionados').text(textStatus + ': ' + errorThrown).show();
                $('#resultados-relacionados').hide();
            });
    },

    // agrega items al listado visible de relacionados.
    actualizarListado: function () {
        $('#titulares-relacionados').empty();
        Object.keys(BuscarRelacionados.seleccionados).forEach(function (key) {
            var template = $('#titulares-template li').clone();
            $(template).attr('data-ts', key).children('span.titular').text(BuscarRelacionados.seleccionados[key]);
            $('#titulares-relacionados').append($(template));
        });
    },

    // rellena el listado de relacionados al cargar la página.
    iniciarListado: function () {
        // si existe el objeto BuscarRelacionados.RELACIONADOS, contiene los relacionados ya almacenados en este artículo.
        if (Object.keys(BuscarRelacionados.seleccionados).length !== 0 && BuscarRelacionados.seleccionados.constructor === Object) {
            Object.keys(BuscarRelacionados.seleccionados).forEach(function (key) {
                var template = $('#titulares-template li').clone();
                $(template).attr('data-ts', key).children('span.titular').text(BuscarRelacionados.seleccionados[key]);
                $('#titulares-relacionados').append($(template));
            });

        }
        return false;
    },
    // elimina un relacionado del listado visible y del input _tax. Usado en el form principal.
    quitarRelacionado: function (elemento) {
        var liPadre = $(elemento).parent();
        var listado = $(liPadre).parent();
        var ts = $(liPadre).data('ts');
        $(listado).find(liPadre).remove();
        delete BuscarRelacionados.seleccionados[ts];
        // rellenamos el input.
        $('#_tax').val(Object.keys(BuscarRelacionados.seleccionados).join(','));
        return false;
    }
};

$(document).ready(function () {
    BuscarRelacionados.init();
});
