/*******************************
 * Eventos asociados a elementos HTML
 *******************************/
$('#compPaginasNegro').on("change", function () {
    var negro = parseInt(document.getElementById('compPaginasNegro').value);
    const paginas = parseInt(document.getElementById('paginas').value);
    if (paginas < negro) {
        document.getElementById('compPaginasNegro').value = paginas;
        negro = paginas;
    }
    var color = parseInt(document.getElementById('compPaginasColor').value);
    if ($('#tipoImpresion').select2('data')[0].id == 'color') {

        var newValue = paginas - negro;
        if (newValue != color) {
            document.getElementById('compPaginasColor').value = newValue >= 0 ? newValue : 0;
            $('#compPaginasColor').change();
        }
    }
});

$('#compPaginasColor').on("change", function () {
    const paginas = parseInt(document.getElementById('paginas').value);
    var color = parseInt(document.getElementById('compPaginasColor').value);
    var negro = parseInt(document.getElementById('compPaginasNegro').value);

    if (paginas < color) {
        document.getElementById('compPaginasColor').value = paginas;
        color = paginas
    }
    var newValue = paginas - color;
    if (newValue != negro) {
        document.getElementById('compPaginasNegro').value = newValue >= 0 ? newValue : 0;
        $('#compPaginasNegro').change();
    }
});

$('#compPaginasNegrohq').on("change", function () {

    var negro = parseInt(document.getElementById('compPaginasNegrohq').value);
    const paginas = parseInt(document.getElementById('paginas').value);
    if (paginas < negro) {
        document.getElementById('compPaginasNegrogq').value = paginas;
        negro = paginas;
    }
    var color = parseInt(document.getElementById('compPaginasColorhq').value);
    if ($('#tipoImpresion').select2('data')[0].id == 'colorhq') {

        var newValue = paginas - negro;
        if (newValue != color) {
            document.getElementById('compPaginasColorhq').value = newValue >= 0 ? newValue : 0;
            $('#compPaginasColorhq').change();
        }
    }

});

$('#compPaginasColorhq').on("change", function () {
    const paginas = parseInt(document.getElementById('paginas').value);
    var color = parseInt(document.getElementById('compPaginasColorhq').value);
    var negro = parseInt(document.getElementById('compPaginasNegrohq').value);

    if (paginas < color) {
        document.getElementById('compPaginasColorhq').value = paginas;
        color = paginas
    }
    var newValue = paginas - color;
    if (newValue != negro) {
        document.getElementById('compPaginasNegrohq').value = newValue >= 0 ? newValue : 0;
        $('#compPaginasNegrohq').change();
    }
});



$('#prototipo').on("change", function () {
    $('#ferro').prop('checked', true)
});



$('#compPosPaginasColor').on("keyup", function () {
    computarPaginasColor(this.value);
});


// Este evento recoloca los headers de las tablas cuando se pulsa el 
// boton del acordeon
$('.accordion-button').on('click', function (e) {

    if (e.target.id.includes("plana")) {
        $("#tableCompIntPlana").DataTable().columns.adjust();
    }
    else if (e.target.id.includes("rotativa")) {
        $("#tableCompIntRotativa").DataTable().columns.adjust();
    }
    else if (e.target.id.includes("cubierta")) {
        $("#tableCompCubierta").DataTable().columns.adjust();
    }
    else if (e.target.id.includes("LineasPresupuesto")) {
        $("#tableLineasPresupuesto").DataTable().columns.adjust();
    }


});




/*******************************
 * Metodos
 *******************************/
function getRowFromLineaInt(tipo, linea) {

    $precio_impresion = isNaN(parseFloat(linea.fields.precio_impresion_horas + linea.fields.margen_impresion_horas)) ? "" : 
        parseFloat(linea.fields.precio_impresion_horas + linea.fields.margen_impresion_horas).toFixed(2);
    

    return {
        'tipo': tipo,
        'paginas': linea.fields.paginas,
        'papel': linea.fields.papel_generico,
        'gramaje': linea.fields.gramaje,
        'marca': linea.fields.papel_impresion,
        'maquina': linea.fields.maquina,
        'numeroPliegos': isNaN(parseFloat(linea.fields.pliegos_libro)) ? "" : parseFloat(linea.fields.pliegos_libro).toFixed(2),
        'pliegosPedido': isNaN(parseFloat(linea.fields.pliegos_pedido)) ? "" : parseFloat(linea.fields.pliegos_pedido).toFixed(2),
        'precioPliego': isNaN(parseFloat(linea.fields.precios_pliegos)) ? "" : parseFloat(linea.fields.precios_pliegos).toFixed(6),
        'libro': isNaN(parseFloat(linea.fields.precio_libro)) ? "" : parseFloat(linea.fields.precio_libro).toFixed(2),
        'totalPapelPedido': isNaN(parseFloat(linea.fields.precio_pedido)) ? "" : parseFloat(linea.fields.precio_pedido).toFixed(2),
        'lomo': isNaN(parseFloat(linea.fields.mano)) ? "" : parseFloat(linea.fields.mano).toFixed(2),
        'peso': isNaN(parseFloat(linea.fields.peso)) ? "" : parseFloat(linea.fields.peso).toFixed(2),
        'horasMaquina': isNaN(parseFloat(linea.fields.horas_maquina)) ? "" : parseFloat(linea.fields.horas_maquina).toFixed(2),
        'precioImpresion': $precio_impresion,
        'total': isNaN(parseFloat(linea.fields.precio_pedido) + parseFloat($precio_impresion)) ?
            "" : (parseFloat(linea.fields.precio_pedido) + parseFloat($precio_impresion)).toFixed(2),
        'maquinaId': linea.fields.maquina_id,
        'maquinaVelocidad': linea.fields.maquina_velocidad,
        'tiempoMaquina': linea.fields.tiempo_maquina,
        'papelGenericoId': linea.fields.papel_generico_id,
        'papelImpresionId': linea.fields.papel_impresion_id,
        'tarifa_impresion_id': linea.fields.tarifa_impresion_id,
    }
}

function getRowFromLineaRot(linea) {

    $precio_impresion = isNaN(parseFloat(linea.fields.precio_impresion_horas + linea.fields.margen_impresion_horas)) ? "" : 
        parseFloat(linea.fields.precio_impresion_horas + linea.fields.margen_impresion_horas).toFixed(2);

    return {
        'tipo': 'rotativa',
        'paginas': linea.fields.paginas,
        'papel': linea.fields.papel_generico,
        'gramaje': linea.fields.gramaje,
        'marca': linea.fields.papel_impresion,
        'aFavorFibra': linea.fields.a_favor_fibra == 1 ? 'si' : 'no',
        'maquina': linea.fields.maquina,
        'numeroPliegos': isNaN(parseFloat(linea.fields.pliegos_libro)) ? "" : parseFloat(linea.fields.pliegos_libro).toFixed(2),
        'pliegosPedido': isNaN(parseFloat(linea.fields.pliegos_pedido)) ? "" : parseFloat(linea.fields.pliegos_pedido).toFixed(2),
        'precioPliego': isNaN(parseFloat(linea.fields.precios_pliegos)) ? "" : parseFloat(linea.fields.precios_pliegos).toFixed(6),
        'libro': isNaN(parseFloat(linea.fields.precio_libro)) ? "" : parseFloat(linea.fields.precio_libro).toFixed(2),
        'totalPapelPedido': isNaN(parseFloat(linea.fields.precio_pedido)) ? "" : parseFloat(linea.fields.precio_pedido).toFixed(2),
        'lomo': isNaN(parseFloat(linea.fields.mano)) ? "" : parseFloat(linea.fields.mano).toFixed(2),
        'peso': isNaN(parseFloat(linea.fields.peso)) ? "" : parseFloat(linea.fields.peso).toFixed(2),
        'horasMaquina': isNaN(parseFloat(linea.fields.horas_maquina)) ? "" : parseFloat(linea.fields.horas_maquina).toFixed(2),
        'precioImpresion': $precio_impresion,
        'precioPagNegro': isNaN(parseFloat(linea.fields.precio_pagina_negro)) ? "" : parseFloat(linea.fields.precio_pagina_negro).toFixed(6),
        'precioPagColor': isNaN(parseFloat(linea.fields.precio_pagina_color)) ? "" : parseFloat(linea.fields.precio_pagina_color).toFixed(6),
        'totalTinta': isNaN(parseFloat(linea.fields.precio_tinta)) ? "" : parseFloat(linea.fields.precio_tinta).toFixed(2),
        'totalCorte': isNaN(parseFloat(linea.fields.total_corte)) ? "" : parseFloat(linea.fields.total_corte).toFixed(2),
        'total': isNaN(parseFloat(linea.fields.total_impresion)) ? "" : (parseFloat(linea.fields.total_impresion)).toFixed(2),
        'maquinaId': linea.fields.maquina_id,
        'maquinaVelocidad': linea.fields.maquina_velocidad,
        'tiempoMaquina': linea.fields.tiempo_maquina,
        'papelGenericoId': linea.fields.papel_generico_id,
        'papelImpresionId': linea.fields.papel_impresion_id,
        'paginasColor': linea.fields.paginas_color,
        'tarifa_impresion_id': linea.fields.tarifa_impresion_id,
    }
}





function computarPaginasColor(string) {

    var numbers = [];
    for (const [, beginStr, endStr] of string.matchAll(/(\d+)(?:-(\d+))?/g)) {
        const [begin, end] = [beginStr, endStr].map(Number);
        numbers.push(begin);
        if (endStr !== undefined) {
            for (let num = begin + 1; num <= end; num++) {
                numbers.push(num);
            }
        }
    }
    var numbers2 = [];
    numbers.forEach(function (value, i) {
        // Si es impar y no está el siguiente par hay que añadirlo
        if (value % 2 != 0 && numbers[i + 1] != value + 1) {
            numbers2.push(value + 1);
        }
    });
    numbers = numbers.concat(numbers2);
    numbers.sort(function (a, b) {
        return a - b;
    });
    calPagesTextarea = document.getElementById('compCalPaginasColor');
    calPagesTextarea.value = numbers;
    autosize.update(calPagesTextarea);
}


function checkRetractiladoComparador(element) {

    switch (element.id) {
        case 'retractilado':
            if ($('#' + element.id).prop('checked')) {
                $('#retractilado5').prop('checked', false);
            }
            break;
        case 'retractilado5':
            if ($('#' + element.id).prop('checked')) {
                $('#retractilado').prop('checked', false);
            }
            break;
        default:
            break;
    }

}

function updatePapelesComparador() {

    var e = document.getElementById("tipoImpresion");
    elements_negro = document.getElementsByClassName('comp-negro-selected');
    elements_negrohq = document.getElementsByClassName('comp-negrohq-selected');
    elements_color = document.getElementsByClassName('comp-color-selected');
    elements_colorhq = document.getElementsByClassName('comp-colorhq-selected');
    switch (e.value) {
        case "negro":
            Array.from(elements_color).forEach(element => {
                element.style.display = "none";
            });
            Array.from(elements_negro).forEach(element => {
                element.style.display = "flex";
            });
            Array.from(elements_negrohq).forEach(element => {
                element.style.display = "none";
            });
            Array.from(elements_colorhq).forEach(element => {
                element.style.display = "none";
            });
            break;

        case "negrohq":
            Array.from(elements_color).forEach(element => {
                element.style.display = "none";

            });
            Array.from(elements_negro).forEach(element => {
                element.style.display = "none";
            });
            Array.from(elements_negrohq).forEach(element => {
                element.style.display = "flex";
            });
            Array.from(elements_colorhq).forEach(element => {
                element.style.display = "none";
            });
            break;

        case "color":
            Array.from(elements_negro).forEach(element => {
                element.style.display = "flex";
            });
            Array.from(elements_negrohq).forEach(element => {
                element.style.display = "none";
            });
            Array.from(elements_color).forEach(element => {
                element.style.display = "flex";
            });
            Array.from(elements_colorhq).forEach(element => {
                element.style.display = "none";
            });
            break;

        case "colorhq":
            Array.from(elements_negro).forEach(element => {
                element.style.display = "none";
            });
            Array.from(elements_negrohq).forEach(element => {
                element.style.display = "flex";
            });
            Array.from(elements_color).forEach(element => {
                element.style.display = "none";
            });
            Array.from(elements_colorhq).forEach(element => {
                element.style.display = "flex";
            });
            break;

        default:
            break;
    }
}



function clearIntLineas(is_color) {
    //$("#tableCompIntPlana").DataTable().rows( '.selected' ).deselect();
    var tabla = $('#tableCompIntPlana').DataTable();
    tabla
        .rows(function (idx, data, node) {
            return data['tipo'].includes(is_color ? 'color' : 'bn');
        })
        .remove()
        .draw();
    //$('#tableCompIntPlana').DataTable().clear().draw();
    $('#insertarPlanaBtn').css('display', 'none');
}


function clearCubierta() {

    $('#tableCompCubierta').DataTable().clear().draw();
    $('#insertarCubiertaBtn').css('display', 'none');
}


function clearIntRot() {

    $('#errorComRot').html('');
    $('#tableCompIntRotativa').DataTable().clear().draw();
    $('#insertarRotativaBtn').css('display', 'none');
}


function selectIntLineas() {
    var negro_selected = false;
    var color_selected = false;
    $("#tableCompIntPlana").DataTable().rows('.selected').deselect();
    $("#tableCompIntPlana").DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) {
        if (!negro_selected && $('#tableCompIntPlana').DataTable().cell(rowIdx, 0).data().includes('bn')) {
            $("#tableCompIntPlana").DataTable().row(rowIdx).nodes().to$().toggleClass('selected');
            negro_selected = true;
        }
        if (!color_selected && $('#tableCompIntPlana').DataTable().cell(rowIdx, 0).data().includes('color')) {
            $("#tableCompIntPlana").DataTable().row(rowIdx).nodes().to$().toggleClass('selected');
            color_selected = true;
        }
    });

    var table = $("#tableCompIntPlana").DataTable();
    var rows = table.rows('.selected').indexes();
    var data = table.rows(rows).data();

    var value_total = 0.00;

    for (let i = 0; i < data.length; i++) {

        value_total += parseFloat(data[i]['total'])
    }

    $('#total_comp_plana').html(value_total.toFixed(2));
}

function selectIntRotLineas() {

    $("#tableCompIntRotativa").DataTable().rows('.selected').deselect();

    let value_total = 0.00;

    if ($("#tableCompIntRotativa").DataTable().rows().count() > 0) {

        $("#tableCompIntRotativa").DataTable().row(0).nodes().to$().toggleClass('selected');
        value_total = parseFloat($("#tableCompIntRotativa").DataTable().rows(0).data()[0]['total'])
    };


    $('#total_comp_rot').html(value_total.toFixed(2));
}

function selectCubiertaLineas() {

    $("#tableCompCubierta").DataTable().rows('.selected').deselect();

    let value_total = 0.00;

    if ($("#tableCompCubierta").DataTable().rows().count() > 0) {

        $("#tableCompCubierta").DataTable().row(0).nodes().to$().toggleClass('selected');
        value_total = parseFloat($("#tableCompCubierta").DataTable().rows(0).data()[0]['total'])
    };


    $('#total_comp_cubierta').html(value_total.toFixed(2));
}

function getIDsComparador(is_color, is_hq) {

    if (!is_color) {
        if (is_hq) {
            var papel = '#compPapelNegrohq';
            var gramaje = '#compGramajeNegrohq';
            var paginas = '#compPaginasNegrohq';
        }
        else {
            var papel = '#compPapelNegro';
            var gramaje = '#compGramajeNegro';
            var paginas = '#compPaginasNegro';
        }
    }
    else {
        if (is_hq) {
            var papel = '#compPapelColorhq';
            var gramaje = '#compGramajeColorhq';
            var paginas = '#compPaginasColorhq';
        }
        else {
            var papel = '#compPapelColor';
            var gramaje = '#compGramajeColor';
            var paginas = '#compPaginasColor';
        }
    }
    return {
        papel: papel,
        gramaje: gramaje,
        paginas: paginas,
    }
}

function getDimensionLibro() {
    var ancho = 0;
    var alto = 0;


    if ($('#papelFormatoId').select2('data').length > 0) {
        if ($('#papelFormatoId').select2('data')[0].id.length > 0) {
            ancho = parseFloat($('#papelFormatoId').select2('data')[0].text.trim().split(" x ")[0]);
            alto = parseFloat($('#papelFormatoId').select2('data')[0].text.trim().split(" x ")[1]);
        }
        else if (document.getElementById('papelFormatoPersonalizado').checked) {
            ancho = parseFloat(document.getElementById('papelFormatoAncho').value);
            alto = parseFloat(document.getElementById('papelFormatoAlto').value);
        }
    }

    else if (document.getElementById('papelFormatoPersonalizado').checked) {
        ancho = parseFloat(document.getElementById('papelFormatoAncho').value);
        alto = parseFloat(document.getElementById('papelFormatoAlto').value);
    }
    return {
        ancho: ancho,
        alto: alto
    }
}

function checkInputsForRotativa() {

    // Si es color, el gramaje y el papel tiene que ser el mismo
    try {

        if ($('#tipoImpresion').select2('data')[0].id == 'color') {
            if ($('#compPapelNegro').select2('data')[0].id == $('#compPapelColor').select2('data')[0].id &&
                $('#compGramajeNegro').select2('data')[0].text.trim() == $('#compGramajeColor').select2('data')[0].text.trim()) {

                return true;
            }
        }
        else if ($('#tipoImpresion').select2('data')[0].id == 'negro') {
            if ($('#compPapelNegro').select2('data')[0].id.length > 0 &&
                $('#compGramajeNegro').select2('data')[0].text.length > 0) {
                return true;
            }
        }


    }
    catch (error) {

        return false;
    }

    return false;
}


function fillIntPlana(data, is_color, is_hq) {
    let sorted = data.lineas.sort(
        (p1, p2) => ((p1.fields.precio_pedido + p1.fields.precio_click_pedido) < (p2.fields.precio_pedido + p2.fields.precio_click_pedido)) ?
            -1 : ((p1.fields.precio_pedido + p1.fields.precio_click_pedido) > (p2.fields.precio_pedido + p2.fields.precio_click_pedido)) ? 1 : 0);
    sorted.forEach(function (linea) {
        if (typeof linea.error == "undefined")
            $('#tableCompIntPlana').DataTable().row
                .add(getRowFromLineaInt(is_color ? (is_hq ? 'colorhq' : 'color') : (is_hq ? 'bnhq' : 'bn'), linea))
                .draw()
    })
}

function fillIntRot(data) {
    let sorted = data.lineas.sort(
        (p1, p2) => ((p1.fields.precio_pedido + p1.fields.precio_click_pedido) < (p2.fields.precio_pedido + p2.fields.precio_click_pedido)) ?
            -1 : ((p1.fields.precio_pedido + p1.fields.precio_click_pedido) > (p2.fields.precio_pedido + p2.fields.precio_click_pedido)) ? 1 : 0);
    sorted.forEach(function (linea) {
        if (typeof linea.error == "undefined") {
            $('#tableCompIntRotativa').DataTable().row
                .add(getRowFromLineaRot(linea))
                .draw()
        }
    })
}

function fillCubierta(data, is_color, is_hq) {

    let sorted = data.lineas.sort(
        (p1, p2) => ((p1.fields.precio_pedido + p1.fields.precio_click_pedido) < (p2.fields.precio_pedido + p2.fields.precio_click_pedido)) ?
            -1 : ((p1.fields.precio_pedido + p1.fields.precio_click_pedido) > (p2.fields.precio_pedido + p2.fields.precio_click_pedido)) ? 1 : 0);
    sorted.forEach(function (linea) {
        if (typeof linea.error == "undefined")
            $('#tableCompCubierta').DataTable().row
                .add(getRowFromLineaInt('cubierta', linea))
                .draw()
    })
}

function clearCompTable() {

    $('#insertarPlanaBtn').addClass('d-none')
    $('#insertarRotativaBtn').addClass('d-none')
    $('#total_comp_plana').html('0.00')
    $('#total_comp_rot').html('0.00')
}

function generateCompJSON() {

    data = {}

    if ($('#tipoImpresion').select2('data')[0].id == 'negro' || $('#tipoImpresion').select2('data')[0].id == 'color') {
        try {
            bn_obj = {
                "bn": {
                    'paginas': $('#compPaginasNegro').val(),
                    'papel_id': $('#compPapelNegro').select2('data')[0].id,
                    'gramaje': $('#compGramajeNegro').select2('data')[0].text.trim(),
                }
            }
        }
        catch (e) {
            bn_obj = {}
        }
        $.extend(data, bn_obj);
    }

    if ($('#tipoImpresion').select2('data')[0].id == 'negrohq' || $('#tipoImpresion').select2('data')[0].id == 'colorhq') {
        try {
            bnhq_obj = {
                "bnhq": {
                    'paginas': $('#compPaginasNegrohq').val(),
                    'papel_id': $('#compPapelNegrohq').select2('data')[0].id,
                    'gramaje': $('#compGramajeNegrohq').select2('data')[0].text.trim(),
                }
            }
        }
        catch (e) {
            bnhq_obj = {}
        }
        $.extend(data, bnhq_obj);
    }

    if ($('#tipoImpresion').select2('data')[0].id == 'color') {
        try {
            color_obj = {
                "color": {
                    'paginas': $('#compPaginasColor').val(),
                    'papel_id': $('#compPapelColor').select2('data')[0].id,
                    'gramaje': $('#compGramajeColor').select2('data')[0].text.trim(),
                },
            }
        }
        catch (e) {
            color_obj = {}
        }
        $.extend(data, color_obj);

    }


    if ($('#tipoImpresion').select2('data')[0].id == 'colorhq') {
        try {
            colorhq_obj = {
                "colorhq": {
                    'paginas': $('#compPaginasColorhq').val(),
                    'papel_id': $('#compPapelColorhq').select2('data')[0].id,
                    'gramaje': $('#compGramajeColorhq').select2('data')[0].text.trim(),
                },
            }
        }
        catch (e) {
            colorhq_obj = {}
        }
        $.extend(data, colorhq_obj);
    }


    try {
        cubierta_obj = {
            "cubierta": {
                'paginas': $('#compCarasCubierta').select2('data')[0].id,
                'papel_id': $('#compPapelCubierta').select2('data')[0].id,
                'gramaje': $('#compGramajeCubierta').select2('data')[0].text.trim(),
            },
        }
    }
    catch (e) {
        cubierta_obj = {}
    }

    $.extend(data, cubierta_obj);

    data_str = JSON.stringify(data)
    $('#comparador_json_data').val(data_str)
}

