/**
 * Permite asignar un botón y modal de búsqueda de URLs a un input con una clase "agregar-urls".
 * El input no tiene un comportamiento asignado, simplemente recibe una URL.
 * Cada botón despliega un modal de búsqueda, que permite buscar y seleccionar un artículo por titular o timestamp.
 */
var BuscarURLs = {
    seleccionados: {},
    init: function() {
        $('input.agregar-url').after(function() {
            return '<button type="button" class="boton-buscar-urls mar-top-bot7 iblock noborder pt9 monlight mar-lef-rig0 hovgray radius15 noborder int-txtnextgray2 txtnextgray2 pad-top-bot4 pad-lef-rig15 int-nextgray2 nextgray2 btn btn-xs" data-target="modal-buscar-urls" data-toggle="modal" data-caller="'+$(this).attr('name')+'"> <span class="glyphicon glyphicon-search"></span> Agregar URL de un artículo</button>';
        });

        $('.boton-buscar-urls').on('click', function (e) {
            e.preventDefault();
            e.stopPropagation();
            // pasamos al modal el dato de que enlace lo invoca para devolver la URL.
            var caller = $(this).data('caller');
            $('#modal-buscar-urls').on('show.bs.modal', function() {
                $('#modal-buscar-urls').data('bs.modal').options.caller = caller;
            });

            // cargamos las URLs más recientes.
            $('#query-urls').text('artículos más recientes.');
            $('#form-buscar-urls')[0].reset();
            BuscarURLs.cargarArticulos(false);
            $('#error-resultados-urls, #resultados-urls').hide();
            $('#modal-buscar-urls').modal();
            return false;
        });

        $('#form-buscar-urls').submit(function (e) {
            e.preventDefault();
            e.stopPropagation();
            $('#error-resultados-urls').hide();
            if ($('#_titular').val() && $('#_titular').val().length < Admin.min_char_busqueda) {
                $('#resultados-urls').hide();
                $('#error-resultados-urls').text('El largo del texto a buscar debe ser de al menos ' + Admin.min_char_busqueda + ' caracteres.').show();
            } else {
                BuscarURLs.cargarArticulos(true);
            }
        });

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

        // devuelve una URL a un input. Usado en el modal.
        $('#lista-resultados-urls').on('click', 'a.resultado-link', function(e) {
            e.preventDefault();
            e.stopPropagation();
            var caller = $('#modal-buscar-urls').data('bs.modal').options.caller;
            var url = $(this).data('url');
            // rellenamos el input.
            $("input[name='"+caller+"'").val(url);
            return false;
        });
        BuscarURLs.cargaSecc();
        $("#url_secc").on('change', BuscarURLs.cargaTemas);
        $("#url_tem").on('change', BuscarURLs.cargaSubtemas);
    },

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

        if (CombosTax.taxonomia == null) {
            setTimeout(BuscarURLs.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('url_secc').selectedIndex < 0) {
            return;
        }

        let id_seccion = document.getElementById('url_secc').options[document.getElementById('url_secc').selectedIndex].value;
        BuscarURLs.clearSelect('url_tem');
        BuscarURLs.clearSelect('url_subt');

        if (typeof (CombosTax.taxonomia[id_seccion]) !== 'undefined') {
            let i = 1;
            var temas = CombosTax.taxonomia[id_seccion]['temas'];
            let combo_temas = document.getElementById('url_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('url_tem').selectedIndex < 0) {
            return;
        }

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

        BuscarURLs.clearSelect('url_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('url_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, caller) {
        $.ajax({
            url: '/cgi-cpn/buscador_relacionados/prontus_buscar_relacionados.cgi',
            type: 'get',
            dataType: 'json',
            data: $('#form-buscar-urls').serializeArray()
        })
        .done(function(json) {
            if (json.status == '1') {
                $('#url-pagina-n').text(json.resultados.curr_page);
                $('#url-paginas-totales').text(json.resultados.paginas);
                if (search) {
                    $('#query-urls').text('"' + json.query + '"');
                } else {
                    $('#query-urls').text('artículos más recientes');
                }
                $('#lista-resultados-urls').empty();
                if (json.resultados.filas) {
                    var template = '';
                    var listadoResultados = $('#lista-resultados-urls');
                    for (var i = 0; i < json.resultados.filas.length; i++) {
                        template = $('#resultado-urls-template').clone();
                        var fila = json.resultados.filas[i];
                        template.children('span.resultado-titular').text(fila.art_titu_minitext);
                        template.children('a.resultado-link').attr('data-url', fila.art_url);
                        template.children('span.resultado-tipo').text(fila.art_tipo);

                        listadoResultados.append(template);
                    }
                }
                $('#cantidad-resultados-urls').text(json.resultados.total == 1 ? '1 artículo encontrado' :
                    json.resultados.total + ' artículos encontrados');
                if (json.resultados.paginas < 2) {
                    $('#paginacion-urls').hide();
                } else {
                    $('#url-pagina-anterior').data('page', json.resultados.prev_page);
                    $('#url-pagina-siguiente').data('page', json.resultados.next_page);
                    $('#url-pagina-final').data('page', json.resultados.last_page);
                    $('#paginacion-urls').show();
                }
                $('#resultados-urls').show();
            } else if (json.status == '0') {
                $('#error-resultados-urls').text(json.msg).show();
                $('#resultados-urls').hide();
            }
        })
        .fail(function(jqXHR, textStatus, errorThrown) {
            $('#error-resultados-urls').text(textStatus + ': ' + errorThrown).show();
            $('#resultados-urls').hide();
        });
    }
};

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