<div class="accordion mt-3" id="accordionEnvios">
    <div class="card accordion-item active">
        <h2 class="accordion-header" id="headingOne">
            <button type="button" class="accordion-button" data-bs-toggle="collapse" data-bs-target="#accordionEnviosTip" aria-expanded="false" aria-controls="accordionEnviosTip">
                <h4><?= lang("Presupuestos.envios") ?></h4>
            </button>
        </h2>

         <div id="accordionEnviosTip" class="accordion-collapse collapse show" data-bs-parent="#accordionEnvios">
            <div class="accordion-body">
                <div id='alert-envios'></div>
                <?= view("themes/backend/vuexy/form/presupuestos/cosidotapablanda/_presupuestoDireccionesForm") ?>
                <div id='rowTable' class='row'>
                    <table id="tableOfDireccionesEnvio" class="table dt-responsive dataTable px-2" style="width: 95%;">
                        <thead>
                            <tr>
                                <th class="lp-header">Tarifa_id</th>
                                <th class="lp-header"><?= lang('PresupuestosDirecciones.cantidad') ?></th>
                                <th class="lp-header"><?= lang('PresupuestosDirecciones.peso') ?></th>
                                <th class="lp-header"><?= lang('PresupuestosDirecciones.att') ?></th>
                                <th class="lp-header"><?= lang('PresupuestosDirecciones.email') ?></th>
                                <th class="lp-header"><?= lang('PresupuestosDirecciones.direccion') ?></th>
                                <th class="lp-header"><?= lang('PresupuestosDirecciones.cp') ?></th>
                                <th class="lp-header"><?= lang('PresupuestosDirecciones.municipio') ?></th>
                                <th class="lp-header"><?= lang('PresupuestosDirecciones.pais') ?></th>
                                <th class="lp-header"><?= lang('PresupuestosDirecciones.telefono') ?></th>
                                <th class="lp-header"><?= lang('PresupuestosDirecciones.proveedor') ?></th>
                                <th>Proveedor_id</th>
                                <th class="lp-header"><?= lang('PresupuestosDirecciones.precio') ?></th>
                                <th>Margen</th>
                                <th>Entrega a pie</th>
                                <th style="min-width:120px !important;" class="lp-header"><?= lang('Basic.global.Action') ?></th>
                            </tr>
                        </thead>
                        <tbody>
                                                        
                        </tbody>
                    </table>
                </div>

                <div class="row">
                    <div class="col-md-12 col-lg-4 px-4 py-2">
                        <input class="form-check-input" type="checkbox" id="recoger_en_taller" name="recoger_en_taller" value="1" <?= $presupuestoEntity->recoger_en_taller == true ? 'checked' : ''; ?> >
                        <label class="form-check-label" for="recoger_en_taller"><?= lang('Presupuestos.recogerEnTaller') ?></label>
                    </div>
                </div>

                <div id="rowInsertar" class="row">
                    <div class="col-md-12 col-lg-4 px-4 py-2">
                        <button id="insertar_direccion" type="button" class="btn btn-secondary waves-effect waves-light float-start"><?= lang("Presupuestos.insertar")?></button>
                    </div>
                </div>
            </div> <!-- //.accordion-body -->
        </div> <!-- //.accordion-collapse -->
    </div> <!-- //.accordion-item -->
</div> <!-- //.accordion -->

<!------------------------------------------->
<!-- Código JS comportamiento general pag. -->
<!------------------------------------------->
<?= $this->section("additionalInlineJs") ?>

$('#insertar_direccion').on('click', function(){
    
    $("#addressForm").attr('action','create')
    var $newAddDialog = $("#addressForm")
    var maximaCantidad = parseInt($('#tirada').val())
    $("#add_cantidad").attr("max" , maximaCantidad);
    $("#add_cantidad").val( maximaCantidad);
    $("#add_cantidad").on('change', function(){ 
        $("#add_cantidad").val(parseInt($("#add_cantidad").val())>maximaCantidad ? maximaCantidad : $("#add_cantidad").val())
    })

    cantidad_total = 0
    tableEnvios.rows().every( function ( rowIdx, tableLoop, rowLoop ) {
        var data = this.data();
        cantidad_total += parseInt(data.cantidad)
    } );
    $('#add_cantidad').attr('max-value', parseInt($('#tirada').val())-cantidad_total)
    $('#add_cantidad').val(parseInt($('#tirada').val())-cantidad_total)
    $newAddDialog.modal('show')
})

const lastColNr_direcciones = $('#tableOfDireccionesEnvio').find("tr:first th").length - 1;

const actionBtns_direcciones = function(data) {
    return `
            <span class="edit-add"><a href="javascript:void(0);"><i class="ti ti-pencil ti-sm btn-edit-add mx-2" data-id="${data.id}"></i></a></span>
            <a href="javascript:void(0);"><i class="ti ti-trash ti-sm delete-add-row mx-2"></i></a>
        `;
};

function updateTablaEnvios(){

    var peso_total_libro = 0
    tableLineasPresupuesto.rows().every( function ( rowIdx, tableLoop, rowLoop ) {
        var rowData = this.data();
        peso_total_libro += parseFloat(rowData.peso)
        
    })
    
    tableEnvios.rows().every( function ( rowIdx, tableLoop, rowLoop ) {
        var rowData = this.data();
        const peso_envio = peso_total_libro*parseInt(rowData.cantidad)/1000.0


        $.post( '<?= route_to('dataTableOfPresupuestoDirecciones') ?>', 
            { 
                tipo: "get_tarifa", 
                peso: peso_envio,
                paisId: rowData.paisId,
                cp: rowData.cp,
                tipo_envio: parseInt(rowData.entregaPieCalle)==1?'palets':'cajas',
                <?= csrf_token() ?? "token" ?> : <?= csrf_token() ?>v,
            })
        .done(function( data ) {
            if(data.length >0){
                
                var precios = []
                for (var i = 0; i < data.length; i++) {
                    if(peso_envio>data[i].peso_max){
                        data[i].precio = (data[i].peso_min + (peso_envio-data[i].peso_min)*data[i].precio_adicional).toFixed(2);
                    }
                    // si no se calcula linealmente
                    else{ 
                        m=((data[i].precio_max-data[i].precio_min)/(data[i].peso_max-data[i].peso_min))
                        b=data[i].precio_max-m*data[i].peso_max
                        data[i].precio = (m*peso_envio+b).toFixed(2);
                    }
                    data[i].margen = data[i].margen
                }
                
                const tarifa_final = data.reduce((previous, current) => {
                    return current.precio < previous.precio ? current : previous;
                });
                tarifa_final.cantidad=parseInt($('#add_cantidad').val())
                tarifa_final.peso=peso_envio
                

                tableEnvios.row(rowIdx)
                    .data({
                        'tarifa_id': tarifa_final.id,
                        'cantidad': rowData.cantidad,
                        'peso': tarifa_final.peso.toFixed(3),
                        'att': rowData.att,
                        'email': rowData.email,
                        'direccion': rowData.direccion,
                        'cp': rowData.cp,
                        'municipio': rowData.municipio,
                        'provincia': rowData.provincia,
                        'paisId': rowData.paisId,
                        'telefono': rowData.telefono,
                        'proveedor': tarifa_final.proveedor,
                        'proveedor_id': tarifa_final.proveedor_id,
                        'precio': tarifa_final.precio,
                        'margen': tarifa_final.margen,
                        'entregaPieCalle': rowData.entregaPieCalle,
                        'actionBtns_direcciones': actionBtns_direcciones,
                    })
                    .draw();

                
                checkInsertar()
                updateTotales(false, false, true)
                
            }
            else{
                popErrorAlert('<?= lang('PresupuestosDirecciones.validation.no_tarifa') ?>', 'error-tarifa')
            }
            
        });
    })

    
    
}

$(document).on('click', '.delete-add-row', function(e) {
    const row = $(this).closest('tr');
    tableEnvios.row( row )
        .remove()
        .draw();
    checkInsertar()
    updateTotales(false, false, true)
})

$(document).on('click', '.btn-edit-add', function(e) {
    const row = $(this).closest('tr');
    var data = tableEnvios.row( row ).data()
    
    $("#addressForm").attr('action','edit')
    $("#addressForm").attr('row', row[0]._DT_RowIndex)
    $("#addressForm").attr('presupuestodireccion_id', $(this).attr('data-id'))
    var $newAddDialog = $("#addressForm")
    var maximaCantidad = parseInt($('#tirada').val())
    $("#add_cantidad").attr("max" , maximaCantidad);
    $("#add_cantidad").val( maximaCantidad);
    $("#add_cantidad").on('change', function(){ 
        $("#add_cantidad").val(parseInt($("#add_cantidad").val())>maximaCantidad ? maximaCantidad : $("#add_cantidad").val())
    })

    cantidad_total = 0
    tableEnvios.rows().every( function ( rowIdx, tableLoop, rowLoop ) {
        var data2 = this.data();
        cantidad_total += parseInt(data2.cantidad)
    } );
    cantidad_total -= parseInt(data.cantidad) // Si es editar tienes que restar los de la linea actual
    $('#add_cantidad').attr('max-value', parseInt($('#tirada').val())-cantidad_total)
    $('#add_cantidad').val(parseInt($('#tirada').val())-cantidad_total)

    $('#add_att').val(data.att)
    $('#add_direccion').val(data.direccion)
    $('#add_email').val(data.email)
    $('#add_cp').val(data.cp)
    $('#add_municipio').val(data.municipio)
    $('#add_provincia').val(data.provincia)
    $('#add_pais_id').val(data.paisId)
    $('#add_telefono').val(data.telefono)
    $('#add_cantidad').val(data.cantidad)
    $('#add_entregaPieCalle').prop('checked', data.entregaPieCalle==1?true:false)

    $newAddDialog.modal('show')
})


const paisList = <?php echo json_encode($paisList); ?>;


$('#recoger_en_taller').change(function(){
    if(this.checked) {
        $('#rowTable').css('display', 'none')
        $('#rowInsertar').css('display', 'none')
        tableEnvios.clear().draw()
    }
    else{
        $('#rowTable').css('display', 'flex')
        $('#rowInsertar').css('display', 'flex')
        tableEnvios.columns.adjust();
    }
})


var tableEnvios = $('#tableOfDireccionesEnvio').DataTable( {
		draw:5,
        serverSide: false,
        processing: true,
        autoWidth: true,
        responsive: true,
        order: [[ 0, "asc" ]],
        pageLength: 20,
        lengthChange: false,
        searching: false, 
        paging: false, 
        info: false,
        scrollX: true,
        
        columns: [
            { 'data': 'tarifa_id' },
            { 'data': 'cantidad' },
            { 'data': 'peso' },
            { 'data': 'att' },
            { 'data': 'email' },
            { 'data': 'direccion' },
            { 'data': 'cp' },
            { 'data': 'municipio' },
            { 'data': 'paisId' ,
                render: function(data, type, row, meta) {
                    var value = paisList.find(element => element.id === data);
                    return value['nombre'];
                },
            },
            { 'data': 'telefono' },
            { 'data': 'proveedor'},
            { 'data': 'proveedor_id'},
            { 'data': 'precio' },
            { 'data': 'margen' },
            { 'data': 'entregaPieCalle' },
            {
                data: actionBtns_direcciones,
                className: 'row-edit dt-center'
            }
        ],
        columnDefs: [
            {
                orderable: false,
                searchable: false,
                targets: [lastColNr_direcciones]
            },
            {"orderData": [ 0],    "targets": 0 },

        ],
        columnDefs: [
            {
                target: [0,11,13,14],
                visible: false,
                searchable: false
            },
        ],
        language: {
            url: "//cdn.datatables.net/plug-ins/1.13.4/i18n/<?= config('Basics')->i18n ?>.json"
        },
        
    } );


function checkInsertar(){
    cantidad_total = 0
    tableEnvios.rows().every( function ( rowIdx, tableLoop, rowLoop ) {
        var data = this.data();
        cantidad_total += parseInt(data.cantidad )
    } );
    htmlString = ''
    if(cantidad_total < parseInt($('#tirada').val())){
        $('#rowInsertar').css('display', 'flex')
    }
    else{
        $('#rowInsertar').css('display', 'none')
    }

    if(cantidad_total != parseInt($('#tirada').val())){
        htmlString = `
                <div class="alert alert-warning d-flex align-items-baseline" role="alert">
                    <span class="alert-icon alert-icon-lg text-primary me-2">
                        <i class="ti ti-bell ti-sm"></i>
                    </span>
                    <div class="d-flex flex-column ps-1">
                        <h5 class="alert-heading mb-2"><?= lang("PresupuestosDirecciones.validation.ejemplares_envio") ?></h5>
                    </div>
                </div>`;  
    }
    $('#alert-envios').html(htmlString)
}

function save_datos_envios(){
    $.post( '<?= route_to('dataTableOfPresupuestoDirecciones') ?>', 
        { 
            tipo: "clear_lineas", 
            presupuesto_id: id,
            <?= csrf_token() ?? "token" ?> : <?= csrf_token() ?>v,
        })
    .done(function( data ) {

        tableEnvios.rows().every( function ( rowIdx, tableLoop, rowLoop ) {
            var data = this.data();
            $.post( '/presupuestos/presupuestodirecciones/add', 
            { 
                presupuesto_id : id,
                tarifa_id : data.tarifa_id,
                cantidad : data.cantidad,
                peso : data.peso,
                att : data.att,
                email : data.email,
                direccion : data.direccion,
                paisId : data.paisId,
                provincia : data.provincia,
                municipio : data.municipio,
                cp : data.cp,
                telefono : data.telefono,
                precio : data.precio,
                margen : data.margen,
                proveedor : data.proveedor,
                proveedor_id : data.proveedor_id,
                entregaPieCalle : data.entregaPieCalle,
                <?= csrf_token() ?? "token" ?> : <?= csrf_token() ?>v,
            })
        });
            
    })

}

load_datos_envios()

function load_datos_envios(){
    $.post( '<?= route_to('dataTableOfPresupuestoDirecciones') ?>', 
        { 
            draw: 1,
            columns: 1,
            search: {
                value: "",
            },
            presupuesto_id: id,
            <?= csrf_token() ?? "token" ?> : <?= csrf_token() ?>v,
        })
    .done(function( data ) {
        data.data.forEach((linea) => {
            tableEnvios.row
                .add({
                    'tarifa_id': linea.tarifa_id,
                    'cantidad': linea.cantidad,
                    'peso': linea.peso,
                    'att': linea.att,
                    'email': linea.email,
                    'direccion': linea.direccion,
                    'cp': linea.cp,
                    'municipio': linea.municipio,
                    'provincia': linea.provincia,
                    'paisId': linea.pais_id,
                    'telefono': linea.telefono,
                    'proveedor': linea.proveedor,
                    'proveedor_id': linea.proveedor_id,
                    'precio': linea.precio,
                    'margen': linea.margen,
                    'entregaPieCalle': linea.entregaPieCalle,
                    'actionBtns_direcciones': actionBtns_direcciones,
                })
                .draw();
            checkInsertar()
            });    
    })
}



<?= $this->endSection() ?>