$(function() {
    moment.locale('es');
    ComboInsumoProducto(1);
    //listar();
    $('#informes').addClass("active");
    // $('#i-karval').addClass("active");

    $('#start').bootstrapMaterialDatePicker({
        format: 'DD-MM-YYYY',
        time: false,
        lang: 'es-do',
        cancelText: 'Cancelar',
        okText: 'Aceptar'
    });

    $('#end').bootstrapMaterialDatePicker({
        useCurrent: false,
        format: 'DD-MM-YYYY',
        time: false,
        lang: 'es-do',
        cancelText: 'Cancelar',
        okText: 'Aceptar'
    });

});

$('#start, #end, #id_ip').change( function() {
    listar();
});

$("#tipo_ip").change(function(){
    $('#id_ip').find('option').remove();
    $("#tipo_ip option:selected").each(function(){
    id_tipo_ins=$(this).val();
       $.post("inventario_ComboInsumoProducto",{id_tipo_ins: id_tipo_ins},function(data){
           $("#id_ip").html(data);
           $('#id_ip').selectpicker();
           $('#id_ip').selectpicker('refresh');
       });
    });
})

var ComboInsumoProducto = function(id_tipo_ins){
    $('#id_ip').find('option').remove();
    $.ajax({
        type: "POST",
        url: $('#url').val()+"informe/inventario_ComboInsumoProducto",
        data: {id_tipo_ins: id_tipo_ins},
        success: function (response) {
            $('#id_ip').html(response);
            $('#id_ip').selectpicker();
            $('#id_ip').selectpicker('refresh');
        },
        error: function () {
            $('#id_ip').html('There was an error!');
        }
    });
}

var listar = function(){

    tipo_ip = $("#tipo_ip").val();
    id_ip = $("#id_ip").val();
    ifecha = $("#start").val();
    ffecha = $("#end").val();

    var stock_entradas = 0,
        stock_salidas = 0,
        stock_final = 0,
        stock_inicial = 0,
        medida = 0;

    $.ajax({
        type: "POST",
        url: $('#url').val()+"informe/inventario_kardex_list",
        data: { 
            tipo_ip: tipo_ip,
            id_ip: id_ip,
            ifecha: ifecha,
            ffecha: ffecha
        },
        dataType: "json",
        success: function (item) {
            console.log(item);
            console.log("Stock Inicial: "+item.stock_inicial);
            
            if (item.data.length != 0) {
                $.each(item.data, function(i, campo) {
                    if(campo.estado == 'a'){
                        medida = campo.Medida.ins_med;
                        stock_entradas += parseFloat(campo.cantidad_entrada);
                        stock_salidas += parseFloat(campo.cantidad_salida);
                        stock_final = parseFloat(campo.Stock.total);
                    }
                });
                stock_inicial = stock_final - (stock_entradas - stock_salidas);
                $('.stock-inicial').html((stock_inicial).toFixed(4)+' <sup>'+medida+'</sup>');
                $('.stock-entradas').html((stock_entradas).toFixed(4)+' <sup>'+medida+'</sup>');
                $('.stock-salidas').html((stock_salidas).toFixed(4)+' <sup>'+medida+'</sup>');
                $('.stock-final').html((stock_final).toFixed(4)+' <sup>'+medida+'</sup>');
            } else {
                $('.stock-inicial').html('0.0000');
                $('.stock-entradas').html('0.0000');
                $('.stock-salidas').html('0.0000');
                $('.stock-final').html('0.0000');
            }
        }
    });

    var stock = 0,
        desc = '';

    var cante = 0,
        cants = 0,
        cantt = 0,
        ent = 0,
        sal = 0,
        tote = 0,
        tots = 0,
        tott = 0,
        scu = 0,
        medida = '';
        table = $('#table')
        .DataTable({
            "destroy": true,
            "responsive": true,
            "dom": "tip",
            "bSort": false,
            "pageLength": 50,
            "ajax":{
            "method": "POST",
            "url": $('#url').val()+"informe/inventario_kardex_list",
            "data": {
                ifecha: ifecha,
                ffecha: ffecha,
                tipo_ip: tipo_ip,
                id_ip: id_ip
                }
            },
            "columns":[
                {"data":"fecha_r","render": function ( data, type, row ) {
                    return '<i class="ti-calendar"></i> '+moment(data).format('DD-MM-Y')
                            +'<br><span class="font-12"><i class="ti-time"></i> '+moment(data).format('h:mm A')+'</span>';
                }},
                {"data": null,"render": function ( data, type, row ) {
                    if(data.estado == 'a'){
                        var estado = '';
                        var label = '';
                    } else {
                        var estado = 'text-danger';
                        var label = '<span class="label label-danger">ANULADO</span>';
                    }
                    if(data.id_tipo_ope == 1){
                        return 'ENTRADA, POR COMPRA. '+label+'<br><span class="font-12 '+estado+'">'+data.Comp.desc_td+' '+data.Comp.ser_doc+'-'+data.Comp.nro_doc+'</span>';
                    }else if(data.id_tipo_ope == 2){
                        return 'SALIDA, POR VENTA. '+label+'<br><span class="font-12 '+estado+'">'+data.Comp.desc_td+' '+data.Comp.ser_doc+'-'+data.Comp.nro_doc+'</span>';
                    }else if(data.id_tipo_ope == 3){
                        return 'ENTRADA, POR AJUSTE DE STOCK. '+label+'<br><span class="font-12 '+estado+'">Responsable:, '+data.Comp.responsable+', '+data.Comp.motivo+'</span>';
                    }else if(data.id_tipo_ope == 4){
                        return 'SALIDA, POR AJUSTE DE STOCK. '+label+'<br><span class="font-12 '+estado+'">Responsable, '+data.Comp.responsable+', '+data.Comp.motivo+'</span>';
                    }
                }},
                {"data": "cantidad_entrada",
                "className": "text-success text-left",
                "render": function ( data, type, row ) {
                    if(data == 0){
                        return '-';
                    } else {
                        return data;
                    }
                }},
                {"data": "costo_entrada","render": function ( data, type, row ) {
                    if(data == 0){
                        return '-';
                    } else {
                        return formatNumber(data);
                    }
                }},
                {"data": "total_entrada","render": function ( data, type, row ) {
                    if(data == 0){
                        return '-';
                    } else {
                        return data;
                    }
                }},
                {"data": "cantidad_salida",
                "className": "text-danger text-left",
                "render": function ( data, type, row ) {
                    if(data == 0){
                        return '-';
                    } else {
                        return formatNumber(data);
                    }
                }},
                {"data": "costo_salida","render": function ( data, type, row ) {
                    if(data == 0){
                        return '-';
                    } else {
                        return formatNumber(data);
                    }
                }},
                {"data": "total_salida","render": function ( data, type, row ) {
                    if(data == 0){
                        return '-';
                    } else {
                        return formatNumber(data);
                    }
                }},
                {"data": null,"render": function ( data, type, row ) {
                   
                    if(data.id_tipo_ope == 1 || data.id_tipo_ope == 3){
                        var ent = data.cant;
                    } else {
                        ent = 0;
                    }

                    if(data.id_tipo_ope == 2 || data.id_tipo_ope == 4){
                        var sal = data.cant;
                    } else {
                        sal = 0;
                    }
              
                    if(data.estado == 'a'){
                        cantt = (ent-sal) + cantt;
                        return '<div class="text-info text-center">'+(stock_inicial + cantt).toFixed(6)+'</div>';
                    } else {
                        return '<div class="text-info text-center">'+(stock_inicial + cantt).toFixed(6)+'</div>';
                    }
                    
                }},
                {"data": null,"render": function ( data, type, row ) {
                   
                    if(data.id_tipo_ope == 1 || data.id_tipo_ope == 3){
                        scu = formatNumber(data.cos_uni);
                    } else if(data.id_tipo_ope == 2 || data.id_tipo_ope == 4){
                        scu = formatNumber(data.Precio.cos_pro);
                    }               
                    return scu;
                }},
                {"data": null,"render": function ( data, type, row ) {
                    //medida = data.Medida.ins_med;
                    tott = (scu * (stock_inicial + cantt)).toFixed(6);
                    return '<div class="font-medium text-center">'+formatNumber(tott)+'</div>';
                }},
            ],
            "footerCallback": function ( row, data, start, end, display ) {
                var api = this.api(), data;

                var intVal = function ( i ) {
                return typeof i === 'string' ?
                    i.replace(/[\$,]/g, '')*1 :
                    typeof i === 'number' ?
                        i : 0;
                };


            }
    });
};

var listar = function() {
    // 1) Leer filtros
    var tipo_ip = $("#tipo_ip").val();
    var id_ip   = $("#id_ip").val();
    var ifecha  = $("#start").val();
    var ffecha  = $("#end").val();

    // variables para cálculos por fila
    var stock_inicial = 0;
    var cantt         = 0;
    var scu           = 0;

    var stock_entradas = 0,
        stock_salidas  = 0,
        stock_final    = 0,
        medida         = '';

    let stockCalculado = 0;

    // 2) Inicializar DataTable
    $('#table').DataTable({
        destroy:    true,
        responsive: true,
        dom:        "tip",
        bSort:      false,
        pageLength: 50,

        ajax: {
            method: "POST",
            url:    $('#url').val() + "informe/inventario_kardex_list",
            data: {
                tipo_ip: tipo_ip,
                id_ip:   id_ip,
                ifecha:  ifecha,
                ffecha:  ffecha
            },
            dataSrc: function(json) {
                // 3) Calcular y volcar resumen de stock
                

                if (json.data.length) {
                    json.data.forEach(function(campo) {
                        if (campo.estado === 'a') {
                            medida          = campo.Medida.ins_med;
                            
                        }
                    });
                    
                } else {
                    $('.stock-inicial, .stock-entradas, .stock-salidas, .stock-final')
                        .html('0.0000');
                }

                // 4) Fusionar kardex + ventas
                var data      = json.data.slice(); // copia de movimientos
                var ventasRow = json.ventas.map(function(v) {
                    var qty = v.cantidad_insumo_por_unidad * v.cantidad_vendida;
                    return {
                        fecha_r:           v.fecha_venta,
                        id_tipo_ope:       2,              // como venta
                        id_ope:            v.id_venta,
                        id_tipo_ins:       tipo_ip,
                        id_ins:            id_ip,
                        cos_uni:           0,
                        cant:              qty,
                        cantidad_entrada:  0,
                        costo_entrada:     0,
                        total_entrada:     0,
                        cantidad_salida:   qty,
                        costo_salida:      v.total,
                        total_salida:      v.total,
                        cantidad_vendida : v.cantidad_vendida,
                        Stock:             false,
                        Medida:            { ins_med: medida },
                        Precio:            { cos_pro: v.total },
                        Comp: {
                            ser_doc: v.serie_doc,
                            nro_doc: v.nro_doc,
                            desc_td: 'Venta'
                        },
                        estado: 'a'
                    };
                });
                return data.concat(ventasRow);
                
            }
        },

        columns: [
            {
                data: "fecha_r",
                render: function(data) {
                    return '<i class="ti-calendar"></i> ' +
                        moment(data).format('DD-MM-Y') +
                        '<br><span class="font-12"><i class="ti-time"></i> ' +
                        moment(data).format('h:mm A') +
                        '</span>';
                }
            },
            {
                data: null,
                render: function(d) {
                    
                    var label = d.estado == 'a' ? '' : '<span class="label label-danger">ANULADO</span>';
                    var cls   = d.estado == 'a' ? '' : 'text-danger';
                    if (d.id_tipo_ope == 1) {
                        return 'ENTRADA, POR COMPRA. ' + label +
                            '<br><span class="font-12 ' + cls + '">' +
                            d.Comp.desc_td + ' ' + d.Comp.ser_doc + '-' + d.Comp.nro_doc +
                            '</span>';
                    }
                    if (d.id_tipo_ope == 2) {
                        return 'SALIDA, POR VENTA. ' + label +
                            '<br><span class="font-12 ' + cls + '">' +
                            d.Comp.desc_td + ' ' + d.Comp.ser_doc + '-' + d.Comp.nro_doc +
                            '</span>';
                    }
                    if (d.id_tipo_ope == 3) {
                        return 'ENTRADA, POR AJUSTE DE STOCK. ' + label +
                            '<br><span class="font-12 ' + cls + '">Responsable: ' +
                            d.Comp.responsable + ', ' + d.Comp.motivo +
                            '</span>';
                    }
                    if (d.id_tipo_ope == 4) {
                        return 'SALIDA, POR AJUSTE DE STOCK. ' + label +
                            '<br><span class="font-12 ' + cls + '">Responsable: ' +
                            d.Comp.responsable + ', ' + d.Comp.motivo +
                            '</span>';
                    }
                }
            },
            {
                data: "cantidad_entrada",
                className: "text-success text-left",
                render: d => d == 0 ? '-' : d
            },
            {
                data: "costo_entrada",
                render: d => d == 0 ? '-' : formatNumber(d)
            },
            {
                data: "total_entrada",
                render: d => d == 0 ? '-' : d
            },
            {
                data: "cantidad_salida",
                className: "text-danger text-left",
                render: d => d == 0 ? '-' : d
            },
            {
                data: "costo_salida",
                render: d => d == 0 ? '-' : formatNumber(d)
            },
            {
                data: "total_salida",
                render: d => d == 0 ? '-' : formatNumber(d)
            },
            {
                data: null,
                render: function(d) {
                    stockCalculado = d.id_tipo_ope == 3 ? stockCalculado + d.cant : stockCalculado - d.cant;
                    return '<div class="text-info text-center">' +
                        parseFloat(stockCalculado) +
                        '</div>';
                }
            },
            {
                data: null,
                render: function(d) {
                    scu = ([1,3].includes(d.id_tipo_ope) ? d.cos_uni : d.Precio.cos_pro);
                    return formatNumber(scu);
                }
            },
            {
                data: null,
                render: function(d) {
                    var totalFila = d.id_tipo_ope == 3 ? d.total_entrada :  d.total_salida;
                    return '<div class="font-medium text-center">' +
                        parseFloat(totalFila) +
                        '</div>';
                }
            }
        ],

        footerCallback: function(row, data, start, end, display) {
            console.log(data);

            data.forEach(function(item) {
                if (item.id_tipo_ope == 3) {
                    stock_inicial += parseFloat(item.cant);
                    stock_entradas += parseFloat(item.cant);
                    
                    
                } else {
                    stock_salidas  += parseFloat(item.cant);
                }
            });

            stock_final    = stock_entradas - stock_salidas;

            $('.stock-inicial').html(stock_inicial.toFixed(4) + ' <sup>' + medida + '</sup>');
            $('.stock-entradas').html(stock_entradas.toFixed(4) + ' <sup>' + medida + '</sup>');
            $('.stock-salidas').html(stock_salidas.toFixed(4) + ' <sup>' + medida + '</sup>');
            $('.stock-final').html(stock_final.toFixed(4) + ' <sup>' + medida + '</sup>');
            
        }
    });
};
