var TRIBUTACAOCLIENTE = 0

$('body').on('change', '.cliente_id', function () {

    let cliente = $('.cliente_id').val()
    if (cliente != '') {
        getClient(cliente)
    } else {

    }
})


$('body').on('keypress', '.next', function (e) {
    // console.log(e)
    if(e.which == 13) {
        $(this).closest('td').next().find('input').focus()
        e.preventDefault();
    }
})

$('body').on('change', '.fornecedor_id', function () {
    let fornecedor = $('.fornecedor_id').val()
    if (fornecedor != '') {
        getFornecedor(fornecedor)
    } else {

    }
})

$('body').on('change', '.transportadora_id', function () {
    let transportadora = $('.transportadora_id').val()
    if (transportadora != '') {
        getTransp(transportadora)
    } else {

    }
})

$('#inp-endereco_entrega_dados_cliente').on("click", function () {
    if($(this).is(':checked')){
        let cliente_id = $('#inp-cliente_id').val()
        if(cliente_id){
            $.get(path_url + "api/clientes/find/" + cliente_id)
            .done((res) => {

                $('#inp-rua_entrega').val(res.rua)
                $('#inp-nome_entrega').val(res.razao_social)
                $('#inp-documento_entrega').val(res.cpf_cnpj)
                $('#inp-numero_entrega').val(res.numero)
                $('#inp-bairro_entrega').val(res.bairro)
                $('#inp-cep_entrega').val(res.cep)
                $('#inp-complemento_entrega').val(res.complemento)

                var newOption = new Option(res.cidade.info, res.cidade.id, false, false);
                $('#inp-cidade_id_entrega').html('')
                $('#inp-cidade_id_entrega').append(newOption).trigger('change');
            })
            .fail((err) => {
                console.log(err)
            })
        }else{
            swal("Erro", "Selecione o cliente!", "warning")
        }
    }else{
        $('#inp-rua_entrega').val('')
        $('#inp-nome_entrega').val('')
        $('#inp-documento_entrega').val('')
        $('#inp-numero_entrega').val('')
        $('#inp-bairro_entrega').val('')
        $('#inp-cep_entrega').val('')
        $('#inp-complemento_entrega').val('')
        $('#inp-cidade_id_entrega').html('')
    }
});

$('.btn-fatura-padrao').on("click", function () {

    console.clear()
    let total = convertMoedaToFloat($('.total_nfe').text())
    if(total <= 0){
        swal("Erro", "Valor precisa ser maior que zero!", "error")
        return;
    }
    
    let data = {
        total: total,
        cliente_id: $('#inp-cliente_id').val()
    }
    $.get(path_url + "api/frenteCaixa/fatura-padrao-cliente", data)
    .done((success) => {
        // console.log(success)
        $('#body-pagamento').html(success)
        calTotalNfe()


    })
    .fail((err) => {
        console.log(err);
    });
});

$('.btn-gerar-fatura').on("click", function () {
    let total = convertMoedaToFloat($('.total_nfe').text())
    if(total == 0){

        swal("Erro", "O valor da venda deve ser maior que 0", "error")
        .then(() => {
            $('#modal_fatura_venda').modal('hide')
        })
        return;
    }

    $('.lbl-total_fatura').text(convertFloatToMoeda(total))
})

$('.btn-store-fatura').on("click", function () {
    console.clear()
    let total = convertMoedaToFloat($('.total_nfe').text())
    if(!$('#inp-parcelas_fatura').val()){
        swal("Erro", "Informe a quantidade de parcelas!", "error")
        return;
    }
    if(!$('#inp-intervalo_fatura').val()){
        swal("Erro", "Informe o intervalo!", "error")
        return;
    }
    let data = {
        entrada_fatura: $('#inp-entrada_fatura').val(),
        parcelas_fatura: $('#inp-parcelas_fatura').val(),
        intervalo_fatura: $('#inp-intervalo_fatura').val(),
        primeiro_vencimento_fatura: $('#inp-primeiro_vencimento_fatura').val(),
        tipo_pagamento_fatura: $('#inp-tipo_pagamento_fatura').val(),
        total: total
    }
    // console.log(data)
    $.get(path_url + "api/frenteCaixa/gerar-fatura", data)
    .done((success) => {
        // console.log(success)
        $('#body-pagamento').html(success)
        calTotalNfe()
        $('#modal_fatura_venda').modal('hide')

    })
    .fail((err) => {
        console.log(err);
    });
})

$("#inp-produto_id").select2({
    minimumInputLength: 2,
    language: "pt-BR",
    placeholder: "Digite para buscar o produto",
    width: "100%",
    ajax: {
        cache: true,
        url: path_url + "api/produtos",
        dataType: "json",
        data: function (params) {
            let empresa_id = $('#empresa_id').val()

            let local_id = null
            if($('#inp-local_id').length){
                let local_id = $('#inp-local_id').val()
                if(!local_id){
                    swal("Alerta", "Selecione primeiramente o local", "warning")
                    return;
                }
            }
            console.clear();

            var query = {
                pesquisa: params.term,
                empresa_id: empresa_id,
                usuario_id: $('#usuario_id').val(),
                lista_id: $('#lista_id').val(),
                local_id: $('#inp-local_id').length ? $('#inp-local_id').val() : null
            };
            return query;
        },
        processResults: function (response) {
            var results = [];
            let compra = 0
            if($('#is_compra') && $('#is_compra').val() == 1){
                compra = 1
            }

            $.each(response, function (i, v) {
                var o = {};
                o.id = v.id;
                if(v.codigo_variacao){
                    o.codigo_variacao = v.codigo_variacao
                }

                if(v.tipo_dimensao == 1){
                    o.espessura = v.espessura
                    o.tipo_dimensao = 1
                }

                if(v.altura){
                    o.altura = v.altura
                }

                if(v.largura){
                    o.largura = v.largura
                }

                o.estoque_atual = v.estoque_atual

                if(v.gerenciar_estoque){
                    o.gerenciar_estoque = v.gerenciar_estoque
                }

                o.text = ""
                if(v.numero_sequencial){
                    o.text += "["+v.numero_sequencial+"] "
                }
                o.text += v.nome
                if(compra == 0){
                    if(parseFloat(v.valor_unitario) > 0){
                        o.text += ' R$ ' + convertFloatToMoeda(v.valor_unitario);
                    }
                }else{
                    o.text += ' R$ ' + convertFloatToMoeda(v.valor_compra);
                }
                if(v.codigo_barras){
                    o.text += ' [' + v.codigo_barras  + ']';
                }
                o.value = v.id;
                results.push(o);
            });
            return {
                results: results,
            };
        },
    },
});

var line = null
$(document).on("click", ".alterar-descricao", function () {
    line = $(this)
    let descricaoLinha = $(this).closest('td').find('.descricao_item').val()

    $inpProduto = $(this).closest('td').find('select')
    if(descricaoLinha != ""){
        $('#modal_descricao_item').modal('show')
        $('#inp-descricao_item').val(descricaoLinha)
    }else{
        if($inpProduto.val()){

            $.get(path_url + "api/produtos/descricao", { 
                produto_id: $inpProduto.val(),
            })
            .done((descricao) => {
                $('#modal_descricao_item').modal('show')
                $('#inp-descricao_item').val(descricao)
            })
            .fail((err) => {
                console.log(err);
            });
        }else{
            toastr.warning("Selecione o produto primeiro!")
        }
    }
})

$('.salvar-descricao').on("click", function () {
    let html = line.closest('td')
    html.find('.descricao_item').val($('#inp-descricao_item').val())
    html.find('.nova_descricao').text($('#inp-descricao_item').val())

})

$('.btn-add-tr-nfe').on("click", function () {
    console.clear()
    var $table = $(this)
    .closest(".row")
    .prev()
    .find(".table-dynamic");

    var hasEmpty = false;

    $table.find("input, select").each(function () {
        if (($(this).val() == "" || $(this).val() == null) && $(this).attr("type") != "hidden" && $(this).attr("type") != "file" && !$(this).hasClass("ignore")) {
            hasEmpty = true;
        }
    });

    if (hasEmpty) {
        swal(
            "Atenção",
            "Preencha todos os campos antes de adicionar novos.",
            "warning"
            );
        return;
    }

    var $tr = $table.find(".dynamic-form").first();

    $tr.find("select.select2").select2("destroy");
    var $clone = $tr.clone();
    $clone.show();

    $clone.find("input,select").val("");
    let lines = $('.dynamic-form').length
    $clone.find("._key").val(lines-1);
    $clone.find("span").html("");
    $clone.find("p").html("");
    $clone.find(".dimensoes-hidden").html("");

    $table.append($clone);
    setTimeout(function () {
        $("tbody select.select2").select2({
            language: "pt-BR",
            width: "100%",
            theme: "bootstrap4"
        });

        $("tbody #inp-produto_id").select2({
            minimumInputLength: 2,
            language: "pt-BR",
            placeholder: "Digite para buscar o produto",
            width: "100%",
            ajax: {
                cache: true,
                url: path_url + "api/produtos",
                dataType: "json",
                data: function (params) {
                    let empresa_id = $('#empresa_id').val()
                    console.clear();
                    var query = {
                        pesquisa: params.term,
                        empresa_id: empresa_id,
                        lista_id: $('#lista_id').val(),
                        usuario_id: $('#usuario_id').val(),
                        local_id: $('#inp-local_id').length ? $('#inp-local_id').val() : null
                    };
                    return query;
                },
                processResults: function (response) {
                    var results = [];
                    let compra = 0
                    if($('#is_compra') && $('#is_compra').val() == 1){
                        compra = 1
                    }
                    $.each(response, function (i, v) {
                        var o = {};
                        o.id = v.id;
                        if(v.codigo_variacao){
                            o.codigo_variacao = v.codigo_variacao
                        }

                        if(v.tipo_dimensao == 1){
                            o.espessura = v.espessura
                        }

                        o.text = ""
                        if(v.numero_sequencial){
                            o.text += "["+v.numero_sequencial+"] "
                        }
                        o.text += v.nome;
                        if(compra == 0){
                            o.text += ' R$ ' + convertFloatToMoeda(v.valor_unitario);
                        }else{
                            o.text += ' R$ ' + convertFloatToMoeda(v.valor_compra);
                        }
                        if(v.codigo_barras){
                            o.text += ' [' + v.codigo_barras  + ']';
                        }

                        o.estoque_atual = v.estoque_atual

                        if(v.gerenciar_estoque){
                            o.gerenciar_estoque = v.gerenciar_estoque
                        }
                            // console.log(o)
                            o.value = v.id;
                            results.push(o);
                        });
                    return {
                        results: results,
                    };
                },
            },
        });
    }, 100);

})

$('body').on('change', '#inp-local_id', function () {
    let local_id = $('#inp-local_id').val();

    $.get(path_url + "api/localizacao/find-number-doc", {local_id: local_id})
    .done((res) => {
        console.log(res)
        $('#inp-numero_nfe').val(res.numero_nfe)
    })
    .fail((err) => {
        console.error(err)
    })
});
$('body').on('change', '#inp-tpNF', function () {
    let tpNF = $('#inp-tpNF').val()
    if (tpNF == 1) {
        $('.div-conta-receber').removeClass('d-none')
        $('.div-conta-pagar').addClass('d-none')
    } else {
        $('.div-conta-receber').addClass('d-none')
        $('.div-conta-pagar').removeClass('d-none')
    }
})

$("body").on("blur", ".qtd", function () {
    setTimeout(() => {
        let quantidade = convertMoedaToFloat($(this).val())
        if($('#lista_id').val() != ''){
            return;
        }
        $produto = $(this).closest('td').prev().find('select');
        $valorUnit = $(this).closest('td').next().find('input');
        $sub = $(this).closest('td').next().next().find('input');

        let compra = $('#is_compra').val()
        if(compra == 1){
            setTimeout(() => {
                calcTotal()
            }, 100)
            return;
        }
        let produto_id = $("#inp-produto_id").val();
        $.get(path_url + "api/produtos/valida-atacado", { 
            quantidade: quantidade, 
            produto_id: $produto.val(),
            local_id: $('#inp-local_id').val()
        })
        .done((success) => {
            if(success){
                $valorUnit.val(convertFloatToMoeda(success));
                $sub.val(convertFloatToMoeda(success*quantidade));
            }
            calcTotal()

        })
        .fail((err) => {
            // console.log(err);
            if(err.status == 401){
                toastr.error(err.responseJSON)
            }
            $(this).val('1')
        });
    }, 100);

})

var isOrcamento = 0
var descontoItem = 0
$(function () {

    if( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) {
        $('td th').removeClass('first-col')
    }
    setTimeout(() => {
        let compra = $('#is_compra').val()
        if (compra == 1) {
            $('.div-conta-pagar').removeClass('d-none')
            $('.div-conta-receber').addClass('d-none')
        }
        isOrcamento = $('#is_orcamento').val();
    }, 300)
    $("#lista_id").val('')

})

function adicionaZero(numero) {
    if (numero <= 9)
        return "0" + numero;
    else
        return numero;
}
$(function () {
    let data = new Date
    let dataFormatada = (data.getFullYear() + "-" + adicionaZero((data.getMonth() + 1)) + "-" + adicionaZero(data.getDate()));
    $('.date_atual').val(dataFormatada)

    if(!$('#inp-natureza_id').val()){
        // $('#inp-gerar_conta_receber').val(0).change()
        // $('#inp-gerar_conta_pagar').val(0).change()
    }

    if ($('.fornecedor_id').val()) {
        getFornecedor($('.fornecedor_id').val())
    }
})


$(document).on("change", ".produto_id", function () {
    let product_id = $(this).val()
    // console.log($(this).select2('data')[0])
    let codigo_variacao = $(this).select2('data')[0].codigo_variacao
    let espessura = $(this).select2('data')[0].espessura
    let altura = $(this).select2('data')[0].altura
    let largura = $(this).select2('data')[0].largura
    let tipo_dimensao = $(this).select2('data')[0].tipo_dimensao
    let estoque_atual = $(this).select2('data')[0].estoque_atual
    let gerenciar_estoque = $(this).select2('data')[0].gerenciar_estoque

    let somaQtdLinhasProduto = 0

    $(".produto_id").each(function (e, v) {
        $qtd = $(this).closest('td').next().find('input');
        if(product_id == $(this).val()){
            let qtd = $qtd.val() ? $qtd.val() : '1'
            somaQtdLinhasProduto += convertMoedaToFloat(qtd)
        }
    })
    // console.log(somaQtdLinhasProduto)

    if (product_id) {

        $qtd = $(this).closest('td').next().find('input');
        $vlUnit = $qtd.closest('td').next().find('input');
        $sub = $vlUnit.closest('td').next().find('input');
        $perc_icms = $sub.closest('td').next().find('input');
        $perc_pis = $perc_icms.closest('td').next().find('input');
        $perc_cofins = $perc_pis.closest('td').next().find('input');
        $perc_ipi = $perc_cofins.closest('td').next().find('input');
        $perc_red_bc = $perc_ipi.closest('td').next().find('input');
        $cfop_estadual = $perc_red_bc.closest('td').next().find('input');
        $ncm = $cfop_estadual.closest('td').next().find('input');
        $codben = $ncm.closest('td').next().find('input');
        $cst_csosn = $codben.closest('td').next().find('select');
        $cst_pis = $cst_csosn.closest('td').next().find('select');
        $cst_cofins = $cst_pis.closest('td').next().find('select');
        $cst_ipi = $cst_cofins.closest('td').next().find('select');


        if(estoque_atual == 0 && gerenciar_estoque == 1 && ($('#is_compra').length == 0 || $('#is_compra').val() == 0)){
            toastr.warning("Produto sem estoque!")
            $(this).html('')
            $qtd.val('')
            $vlUnit.val('')
            $sub.val('')
            $perc_icms.val('')
            $perc_pis.val('')
            $perc_cofins.val('')
            $perc_ipi.val('')
            $perc_red_bc.val('')
            $cfop_estadual.val('')
            $ncm.val('')
            $codben.val('')
            $cst_csosn.val('').change()
            $cst_pis.val('').change()
            $cst_cofins.val('').change()
            $cst_ipi.val('').change()
            return;
        }
        // console.log(somaQtdLinhasProduto)
        // console.log(estoque_atual)
        if(gerenciar_estoque == 1 && somaQtdLinhasProduto > estoque_atual && $('#is_compra').val() == 0){
            toastr.warning("Produto com estoque insuficiente!")
            $(this).html('')
            $qtd.val('')
            $vlUnit.val('')
            $sub.val('')
            $perc_icms.val('')
            $perc_pis.val('')
            $perc_cofins.val('')
            $perc_ipi.val('')
            $perc_red_bc.val('')
            $cfop_estadual.val('')
            $ncm.val('')
            $codben.val('')
            $cst_csosn.val('').change()
            $cst_pis.val('').change()
            $cst_cofins.val('').change()
            $cst_ipi.val('').change()
            return;
        }

        $.get(path_url + "api/produtos/find", 
        { 
            produto_id: product_id,
            tributacao_cliente: TRIBUTACAOCLIENTE,
            usuario_id: $('#usuario_id').val(),
            cliente_id: $('#inp-cliente_id').val(),
            fornecedor_id: $('#inp-fornecedor_id').val(),
            lista_id: $('#lista_id').val(),
            entrada: $('#is_compra') ? $('#is_compra').val() : 0
        })
        .done((e) => {

            let cfop = e.cfop_atual
            let is_xml = $('#is_xml') ? $('#is_xml').val() : 0
            if(is_xml) return 1
                $qtd.val('1')
            let value_unit = 0
            let compra = $('#is_compra').val()
            if (compra == '1') {
                if (e.valor_compra) {
                    value_unit = e.valor_compra
                } else {
                    value_unit = 0
                }
            } else {
                value_unit = e.valor_unitario
            }

            // console.log(e)
            $vlUnit.val(convertFloatToMoeda(value_unit))
            $sub.val(convertFloatToMoeda(value_unit))
            $perc_icms.val(e.perc_icms)
            $perc_pis.val(e.perc_pis)
            $perc_cofins.val(e.perc_cofins)
            $perc_ipi.val(e.perc_ipi)
            $perc_red_bc.val(e.perc_red_bc)
            $cfop_estadual.val(cfop)
            $ncm.val(e.ncm)
            $codben.val(e.codigo_beneficio_fiscal)
            $cst_csosn.val(e.cst_csosn).change()
            $cst_pis.val(e.cst_pis).change()
            $cst_cofins.val(e.cst_cofins).change()
            $cst_ipi.val(e.cst_ipi).change()
            calcTotal()
            calTotalNfe()
            limpaFatura()
            $qtd.focus()
            if(e.variacao_modelo_id && !codigo_variacao){
                buscarVariacoes(product_id)
            }

            if(codigo_variacao > 0){
                setarVariacao(codigo_variacao)
            }

            if(tipo_dimensao){
                KEY = null
                $('#dados_dimensao').modal('show')
                $('#dimensao_total').val('')
                $('#dados_dimensao .modal-title').text(e.nome)
                $('#dados_dimensao #dimensao_valor_unitario_m2').val(convertFloatToMoeda(e.valor_unitario))
                $('#dados_dimensao #dimensao_espessura').val((e.espessura))
                $('#dados_dimensao #dimensao_largura').val((e.largura))
                $('#dados_dimensao #dimensao_altura').val((e.altura))

                if(e.altura > 0 && e.largura > 0){
                    $('#dados_dimensao #dimensao_largura').prop('readonly', true);
                    $('#dados_dimensao #dimensao_altura').prop('readonly', true);
                }
                $('#btn-salvar-dimensao').text('Salvar')

            }
        })
        .fail((e) => {
            console.log(e)
        })
    }
})

var KEY = null
function alterarDimensoesItem(id, key){
    KEY = key
    DIMENSOES = []
    $.get(path_url + "api/produtos/get-dimensao-edit", {id: id})
    .done(res => {
        $('#dados_dimensao').modal('show')
        $('#dados_dimensao table tbody').html(res.view)
        $('#dados_dimensao .modal-title').text(res.produto.nome)
        $('#dados_dimensao #dimensao_espessura').val(convertFloatToMoeda(res.produto.espessura))
        $('#dados_dimensao #dimensao_valor_unitario_m2').val(convertFloatToMoeda(res.produto.valor_unitario))
        $('#btn-salvar-dimensao').text('Editar')
        let cont = 0;
        res.data.map((x) => {
            let js = {
                key: cont,
                dimensao_valor_unitario_m2: x.valor_unitario_m2,
                dimensao_largura: x.largura,
                dimensao_altura: x.altura,
                dimensao_quantidade: x.quantidade,
                dimensao_m2_total: x.m2_total,
                dimensao_espessura: x.espessura,
                dimensao_sub_total: x.sub_total,
                dimensao_observacao: x.observacao,
            }
            DIMENSOES.push(js)
            cont++

        })

        setTimeout(() => {
            calculaTotalDimensao()
        }, 100)
    })
    .fail(err => {
        console.log(err)
    })
}

$(document).on("blur", "#dimensao_quantidade", function () {
    calculaDimensao()
})

    // $(document).on("blur", "#dimensao_largura", function () {
    //     let value = parseFloat($(this).val())
    //     dif = -1
        // while(dif != 0){
        //     dif = value%5
        //     if(dif != 0){
        //         value++
        //     }else{
        //         $(this).val(value)
        //     }
        // }
    // })

    // $(document).on("blur", "#dimensao_altura", function () {
    //     let value = parseFloat($(this).val())
    //     dif = -1
    //     while(dif != 0){
    //         dif = value%5
    //         if(dif != 0){
    //             value++
    //         }else{
    //             $(this).val(value)
    //         }
    //     }
    // })

    function calculaDimensao(){
        let qtd = parseFloat($('#dimensao_quantidade').val())
        let dimensao_valor_unitario_m2 = convertMoedaToFloat($('#dimensao_valor_unitario_m2').val())
        let dimensao_largura = parseFloat($('#dimensao_largura').val())
        let dif = -1
        while(dif != 0){
            dif = dimensao_largura%5
            if(dif != 0){
                dimensao_largura++
            }
        }
        let dimensao_altura = parseFloat($('#dimensao_altura').val())
        dif = -1
        while(dif != 0){
            dif = dimensao_altura%5
            if(dif != 0){
                dimensao_altura++
            }
        }

        let m2 = qtd * (dimensao_largura/1000) * (dimensao_altura/1000)
        $('#dimensao_m2_total').val(m2.toFixed(3))
        $('#dimensao_sub_total').val(convertFloatToMoeda(m2*dimensao_valor_unitario_m2))
    }

    var DIMENSOES = []
    $(document).on("click", "#btn-add-dimensao", function () {

        let dimensao_valor_unitario_m2 = $('#dimensao_valor_unitario_m2').val()
        let dimensao_largura = $('#dimensao_largura').val()
        let dimensao_altura = $('#dimensao_altura').val()
        let dimensao_quantidade = $('#dimensao_quantidade').val()
        let dimensao_m2_total = $('#dimensao_m2_total').val()
        let dimensao_espessura = $('#dimensao_espessura').val()
        let dimensao_sub_total = $('#dimensao_sub_total').val()
        let dimensao_observacao = $('#dimensao_observacao').val()

        let data = {
            dimensao_valor_unitario_m2: dimensao_valor_unitario_m2,
            dimensao_largura: dimensao_largura,
            dimensao_altura: dimensao_altura,
            dimensao_quantidade: dimensao_quantidade,
            dimensao_m2_total: dimensao_m2_total,
            dimensao_espessura: dimensao_espessura,
            dimensao_sub_total: dimensao_sub_total,
            dimensao_observacao: dimensao_observacao,
        }

        DIMENSOES.push(data)

        $.get(path_url + "api/produtos/linha-dimensao", data)
        .done(res => {
            // console.log(res)
            $('#dados_dimensao table tbody').append(res)
            calculaTotalDimensao()

            if(!$('#dimensao_largura').prop('readonly')) {
                $('#dimensao_largura').val('')
            }
            if(!$('#dimensao_altura').prop('readonly')) {
                $('#dimensao_altura').val('')
            }
            $('#dimensao_quantidade').val('')
            $('#dimensao_m2_total').val('')
            $('#dimensao_sub_total').val('')
            $('#dimensao_observacao').val('')
            $('#dimensao_largura').focus()
        })
        .fail(err => {
            console.log(err)
        })
    })

    $(document).on("click", ".btn-remove-tr-dimensao", function () {
        let key = $(this).data('key')
        $line = $(this).closest('tr')
        $line.remove()
        DIMENSOES = DIMENSOES.filter((x) => {
            return x.key != key
        })
        // console.log(DIMENSOES)
        calculaTotalDimensao()
    })

    function calculaTotalDimensao(){
        setTimeout(() => {
            let total = 0
            $("#dados_dimensao .sub_total").each(function () {
                total += convertMoedaToFloat($(this).text())
            })
            $('#dimensao_total').val(convertFloatToMoeda(total))
        }, 100)
    }

    $(document).on("click", "#btn-salvar-dimensao", function () {
        let salvar = $("#btn-salvar-dimensao").text() == 'Salvar' ? 1 : 0
        $('.dimensoes-hidden').html('')
        if(salvar == 1){
            DIMENSOES.map((x, i) => {

                let l = $('.table-produtos .dynamic-form').length-1

                let input = "<input type='hidden' name='dimensao_altura[]' value='"+x.dimensao_altura+"' />"
                input += "<input type='hidden' name='dimensao_espessura[]' value='"+x.dimensao_espessura+"' />"
                input += "<input type='hidden' name='dimensao_largura[]' value='"+x.dimensao_largura+"' />"
                input += "<input type='hidden' name='dimensao_m2_total[]' value='"+x.dimensao_m2_total+"' />"
                input += "<input type='hidden' name='dimensao_observacao[]' value='"+x.dimensao_observacao+"' />"
                input += "<input type='hidden' name='dimensao_quantidade[]' value='"+x.dimensao_quantidade+"' />"
                input += "<input type='hidden' name='dimensao_sub_total[]' value='"+x.dimensao_sub_total+"' />"
                input += "<input type='hidden' name='dimensao_valor_unitario_m2[]' value='"+x.dimensao_valor_unitario_m2+"' />"
                input += "<input type='hidden' name='_line[]' value='"+l+"' />"
                $('.dimensoes-hidden').last().append(input)
            })
        }else{

            DIMENSOES.map((x, i) => {
                let l = $('.table-produtos .dynamic-form').length-1

                let input = "<input type='hidden' name='dimensao_altura[]' value='"+x.dimensao_altura+"' />"
                input += "<input type='hidden' name='dimensao_espessura[]' value='"+x.dimensao_espessura+"' />"
                input += "<input type='hidden' name='dimensao_largura[]' value='"+x.dimensao_largura+"' />"
                input += "<input type='hidden' name='dimensao_m2_total[]' value='"+x.dimensao_m2_total+"' />"
                input += "<input type='hidden' name='dimensao_observacao[]' value='"+x.dimensao_observacao+"' />"
                input += "<input type='hidden' name='dimensao_quantidade[]' value='"+x.dimensao_quantidade+"' />"
                input += "<input type='hidden' name='dimensao_sub_total[]' value='"+x.dimensao_sub_total+"' />"
                input += "<input type='hidden' name='dimensao_valor_unitario_m2[]' value='"+x.dimensao_valor_unitario_m2+"' />"
                input += "<input type='hidden' name='_line[]' value='"+KEY+"' />"
                $('.dh_'+KEY).last().append(input)
            })
        }

        setTimeout(() => {
            $('#dados_dimensao').modal('hide')
            let dimensao_total = $('#dimensao_total').val()
            $('.valor_unit').last().val(dimensao_total)
            $('.sub_total_new').last().val(dimensao_total)
            calcTotal()
        }, 100)

    })

    function setarVariacao(codigo_variacao){
        $varicao = $('.table-produtos').find("tr").last().find('input')[0]
        $varicao.value = codigo_variacao
    }

    function buscarVariacoes(produto_id){
        $.get(path_url + "api/variacoes/find", { produto_id: produto_id })
        .done((res) => {
            $('#modal_variacao .modal-body').html(res)
            $('#modal_variacao').modal('show')
        })
        .fail((err) => {
            console.log(err)
            swal("Algo deu errado", "Erro ao buscar variações", "error")
        })
    }

    function selecionarVariacao(id, descricao, valor){

        $varicao = $('.table-produtos').find("tr").last().find('input')[1]
        $qtd = $('.table-produtos').find("tr").last().find('input')[2]
        $vlUnit = $('.table-produtos').find("tr").last().find('input')[3]
        $sub = $('.table-produtos').find("tr").last().find('input')[4]
        $select = $('.table-produtos').find("tr").last().find('select').first()
        $varicao.value = id
        $qtd.value = '1,00'
        $vlUnit.value = (convertFloatToMoeda(valor))
        $sub.value = (convertFloatToMoeda(valor))
        $select.closest('td').append('<span>variação: <strong>'+descricao+'</strong></span>')
        $('#modal_variacao').modal('hide')
        calcTotal()
        calTotalNfe()
        limpaFatura()
    }

    $('.valor_frete, .desconto, .acrescimo').blur(() => {
        limpaFatura()
    })


    function limpaFatura() {

        $('#body-pagamento tr').each(function (e, x) {
            if (e == 0) {
                setTimeout(() => {
                    let total = convertMoedaToFloat($('.total_prod').val())
                    let valor_frete = convertMoedaToFloat($('.valor_frete').val())
                    let desconto = convertMoedaToFloat($('.desconto').val())
                    let acrescimo = convertMoedaToFloat($('.acrescimo').val())
                // $('.valor_fatura').first().val(convertFloatToMoeda(total + valor_frete - desconto + acrescimo))
                $('.tipo_pagamento').first().val('').change()
                let data = new Date
                let dataFormatada = (data.getFullYear() + "-" + adicionaZero((data.getMonth() + 1)) + "-" + adicionaZero(data.getDate()));
                $('.date_atual').first().val(dataFormatada)
            }, 500)

            } else {
                x.remove();
            }
        })
    }

    $(document).on('change', '.tipo_pagamento', function () {

        let primeiroSelect = $('.tipo_pagamento').first();
        if (!$(this).is(primeiroSelect)) {
            return;
        }

        if($(this).val()){
            $('.valor_fatura').val(convertFloatToMoeda(total_venda))
        }
    });

    $('body').on('blur', '.valor_unit', function () {

        $qtd = $(this).closest('td').prev().find('input');
        $sub = $(this).closest('td').next().find('input');
        let value_unit = $(this).val();
        value_unit = convertMoedaToFloat(value_unit)
        let qtd = convertMoedaToFloat($qtd.val())
        $sub.val(convertFloatToMoeda(qtd * value_unit))
        calcTotal()
        
        if($('#is_compra') && $('#is_compra').val() == 1){
            return;
        }

        if($('#is_orcamento').val() == 0){
            return;
        }
        // validaDescontoItem(qtd, value_unit)
        $inpProduto = $(this).closest('td').prev().prev().find('select')
        if($inpProduto.val()){
            $.get(path_url + "api/orcamentos/valida-desconto", 
            { 
                produto_id: $inpProduto.val(), valor: value_unit, empresa_id: $('#empresa_id').val() 
            }).done((res) => {
                $sub.val(convertFloatToMoeda(qtd * value_unit))
            })
            .fail((err) => {
                console.log(err)
                let v = err.responseJSON
                $(this).val(convertFloatToMoeda(v))
                $sub.val(convertFloatToMoeda(qtd * v))
                swal("Erro", "Valor minímo para este item " + convertFloatToMoeda(v), "error")
            })
        }
    })

    function validaDescontoItem(qtd, value_unit){
        let produto_id
        $sub.val(convertFloatToMoeda(qtd * value_unit))
    }

    $('body').on('blur', '.qtd', function () {
        $value_unit = $(this).closest('td').next().find('input');
        $sub = $(this).closest('td').next().next().find('input');
        let qtd = $(this).val();
        qtd = convertMoedaToFloat(qtd)
        let value_unit = convertMoedaToFloat($value_unit.val())
        $sub.val(convertFloatToMoeda(qtd * value_unit))

        $prod = $(this).closest('td').prev().find('select')
        if($prod.select2('data')[0].gerenciar_estoque == 1 && $('#is_compra').val() == 0){
            let estoque = $prod.select2('data')[0].estoque_atual
            if(qtd > estoque){
                toastr.warning("Quantidade de estoque insuficiente!")
                $(this).val(estoque)
                $sub.val(convertFloatToMoeda(estoque * value_unit))
            }
        }

    })

    $('.btn-add-tr').on("click", function () {

        var $table = $(this)
        .closest(".row")
        .prev()
        .find(".table-dynamic");
        var hasEmpty = false;
        $table.find("input, select").each(function () {
            if (($(this).val() == "" || $(this).val() == null) && $(this).attr("type") != "hidden" && $(this).attr("type") != "file" && !$(this).hasClass("ignore")) {
                hasEmpty = true;
            }
        });
        if (hasEmpty) {
            swal(
                "Atenção",
                "Preencha todos os campos antes de adicionar novos.",
                "warning"
                );
            return;
        }
        // $table.find("select.select2").select2("destroy");
        var $tr = $table.find(".dynamic-form").first();
        $tr.find("select.select2").select2("destroy");
        var $clone = $tr.clone();
        $clone.show();
        $clone.find("input,select").val("");
        $table.append($clone);
        setTimeout(function () {
            $("tbody select.select2").select2({
                language: "pt-BR",
                width: "100%",
                theme: "bootstrap4"
            });
        }, 100);
    })

    $(document).delegate(".btn-remove-tr", "click", function (e) {
        e.preventDefault();
        swal({
            title: "Você esta certo?",
            text: "Deseja remover esse item mesmo?",
            icon: "warning",
            buttons: true
        }).then(willDelete => {
            if (willDelete) {
                var trLength = $(this)
                .closest("tr")
                .closest("tbody")
                .find("tr")
                .not(".dynamic-form-document").length;
                if (!trLength || trLength > 1) {
                    $(this)
                    .closest("tr")
                    .remove();
                    calcTotal()
                    calTotalNfe()
                    limpaFatura()
                } else {
                    swal(
                        "Atenção",
                        "Você deve ter ao menos um item na lista",
                        "warning"
                        );
                }
            }
        });
    });


    function getClient(cliente) {
        $('.btn-fatura-padrao').addClass('d-none')

        $.get(path_url + "api/clientes/find/" + cliente)
        .done((res) => {
            if(res.inadimplente == true){
                $('.cliente_id').val()
                swal(
                    "Atenção",
                    "Este cliente está inadimplente, não é permitido vender!",
                    "warning"
                    );
                return;
            }
            $('#inp-cliente_nome').val(res.razao_social)
            $('#inp-nome_fantasia').val(res.nome_fantasia)
            $('#inp-cliente_cpf_cnpj').val(res.cpf_cnpj)
            $('#inp-ie').val(res.ie)
            $('#inp-telefone').val(res.telefone)
            $('#inp-contribuinte').val(res.contribuinte).change()
            $('#inp-consumidor_final').val(res.consumidor_final).change()
            $('#inp-email').val(res.email)
            $('#inp-cidade_cliente').val(res.cidade_id).change()
            $('#inp-cliente_rua').val(res.rua)
            $('#inp-cliente_numero').val(res.numero)
            $('#inp-cep').val(res.cep)
            $('#inp-cliente_bairro').val(res.bairro)
            $('#inp-complemento').val(res.complemento)

            if(res.fatura.length > 0){
                $('.btn-fatura-padrao').removeClass('d-none')
            }

            if(res.lista_preco_id){
                $('#lista_id').val(res.lista_preco_id)
                $('.lista_selecionada').text('Lista selecionada: ' + res.lista_preco.nome + " " + res.lista_preco.percentual_alteracao + "%")
            }

            let tributacao = res.tributacao
            if(tributacao){
                TRIBUTACAOCLIENTE = 0
                if(tributacao.ncm || tributacao.perc_cofins || tributacao.perc_icms || tributacao.perc_ipi || tributacao.perc_pis || tributacao.perc_red_bc){
                    TRIBUTACAOCLIENTE = 1
                }

                if(tributacao.cest || tributacao.cfop_estadual || tributacao.cfop_outro_estado || tributacao.cst_cofins || tributacao.cst_csosn || tributacao.cst_ipi || tributacao.cst_pis){
                    TRIBUTACAOCLIENTE = 1
                }

                if(TRIBUTACAOCLIENTE == 1){
                    swal({
                        title: "Tributação?",
                        text: "Este cliente possui um padrão de tributação exclusivo deseja utilizar?",
                        icon: "info",
                        buttons: true,
                        buttons: ["NÃO", "SIM"],
                        dangerMode: true,
                    }).then((isConfirm) => {
                        if (isConfirm) {
                            TRIBUTACAOCLIENTE = 1
                        } else {
                            swal("", "O Padrão não será utilizado", "info");
                            TRIBUTACAOCLIENTE = 0
                        }
                    });
                }
            }
        })
        .fail((err) => {
            console.error(err)
        })
    }

    function getFornecedor(fornecedor) {
        $.get(path_url + "api/fornecedores/find/" + fornecedor)
        .done((res) => {
            $('#inp-fornecedor_nome').val(res.razao_social)
            $('#inp-nome_fantasia').val(res.nome_fantasia)
            $('#inp-fornecedor_cpf_cnpj').val(res.cpf_cnpj)
            $('#inp-ie').val(res.ie)
            $('#inp-telefone').val(res.telefone)
            $('#inp-contribuinte').val(res.contribuinte).change()
            $('#inp-consumidor_final').val(res.consumidor_final).change()
            $('#inp-email').val(res.email)
            $('#inp-fornecedor_cidade').val(res.cidade_id).change()
            $('#inp-fornecedor_rua').val(res.rua)
            $('#inp-fornecedor_numero').val(res.numero)
            $('#inp-cep').val(res.cep)
            $('#inp-fornecedor_bairro').val(res.bairro)
            $('#inp-complemento').val(res.complemento)
        })
        .fail((err) => {
            console.error(err)
        })
    }

    function getTransp(transportadora) {
        $.get(path_url + "api/transportadoras/find/" + transportadora)
        .done((res) => {
            $('#inp-razao_social_transp').val(res.razao_social)
            $('#inp-nome_fantasia_transp').val(res.nome_fantasia)
            $('#inp-cpf_cnpj_transp').val(res.cpf_cnpj)
            $('#inp-ie_transp').val(res.ie)
            $('#inp-antt').val(res.antt)
            $('#inp-telefone_transp').val(res.telefone)
            $('#inp-email_transp').val(res.email)
        // $('#inp-cidade_transp').val(res.cidade_id).change()
        $('#inp-rua_transp').val(res.rua)
        $('#inp-numero_transp').val(res.numero)
        $('#inp-cep_transp').val(res.cep)
        $('#inp-bairro_transp').val(res.bairro)
        $('#inp-complemento_transp').val(res.complemento)

        var newOption = new Option(res.cidade.info, res.cidade.id, false, false);
        $('#inp-cidade_transp').html('')
        $('#inp-cidade_transp').append(newOption).trigger('change');
    })
        .fail((err) => {
            console.error(err)
        })
    }


    $(function () {
        $('body').on('blur', '.acrescimo, .desconto', function () {
            calTotalNfe()
        })
    })

    $(function () {
        calcTotal()
        $('body').on('blur', '.produto_id', function () {
            calcTotal()
        })

        calcTotal()
        $('body').on('blur', '.sub_total', function () {
            calcTotal()
        })
    })


// CÁLCULO TOTAL DE PRODUTOS
var total_venda = 0
function calcTotal() {
    $('.h5-ipi').addClass('d-none')
    var total = 0
    var totalIpi = 0
    $(".sub_total").each(function () {
        total += convertMoedaToFloat($(this).val())
        $percIpi = $(this).closest('td').next().next().next().next().find('input')
        if($percIpi.val() > 0){
            let vIpi = convertMoedaToFloat($(this).val()) * ($percIpi.val()/100)
            vIpi = parseFloat(vIpi.toFixed(2))
            totalIpi += vIpi
        }
    })
    setTimeout(() => {
        total_venda = total

        $('.total_prod').html("R$ " + convertFloatToMoeda(total))
        if(totalIpi > 0){
            $('.total_ipi').html("R$ " + convertFloatToMoeda(totalIpi))
            $('.h5-ipi').removeClass('d-none')
        }
        $('.total_prod').val(total)
        calTotalNfe()
    }, 100)
}

$('body').on('blur', '.perc_ipi', function () {
    calcTotal()
})

$(function () {
    calcTotalFatura()
    $('body').on('blur', '.valor_fatura', function () {
        calcTotalFatura()
    })
})

function calcTotalFatura() {
    var total = 0
    $(".valor_fatura").each(function () {
        total += convertMoedaToFloat($(this).val())
    })

    setTimeout(() => {
        // let acrescimo = convertMoedaToFloat($('#inp-acrescimo').val())
        // let desconto = convertMoedaToFloat($('#inp-desconto').val())
        // let total_nfe = $('.total_nfe').val()
        total_fatura = total
        $('.total_fatura').html("R$ " + convertFloatToMoeda(total))
    }, 100)
}


// CALCULO TOTAL DA NFE
$(function () {
    $('body').on('blur', '.valor_frete', function () {
        calTotalNfe()
    })
})
var total_frete = 0
var total_nfe = 0
function calTotalNfe() {
    let acrescimo = convertMoedaToFloat($('#inp-acrescimo').val())
    let desconto = convertMoedaToFloat($('#inp-desconto').val())
    let total_fr = convertMoedaToFloat($("#inp-valor_frete").val())
    let total_ipi = 0
    if($(".total_ipi").length){
        total_ipi = convertMoedaToFloat($(".total_ipi").text())
    }
    let total_prod = parseFloat($('.total_prod').val())

    setTimeout(() => {
        total_frete = total_fr
        total_nfe = total_prod + total_fr + acrescimo - desconto + total_ipi
        $('.total_frete').html("R$ " + convertFloatToMoeda(total_fr))
        $('.total_nfe').html("R$ " + convertFloatToMoeda(total_nfe))
        // $('.valor_fatura').val(convertFloatToMoeda(total_nfe))
        $('.valor_total').val(convertFloatToMoeda(total_nfe))
        calcTotalFatura()
    }, 100)
}


$('.btn-salvar-nfe').click(() => {
    addClassRequired()
})

function addClassRequired() {
    if($('#is_compra').val() != 1){
        let infMsg = ""
        $("body #form-nfe").find('input, select').each(function () {
            if ($(this).prop('required')) {
                if ($(this).val() == "") {
                    try {
                        infMsg += $(this).prev()[0].textContent + "\n"
                    } catch { }
                    $(this).addClass('is-invalid')
                } else {
                    $(this).removeClass('is-invalid')
                }
            } else {
                $(this).removeClass('is-invalid')
            }
        })
        if (!$('.produto_id').val()) {
            infMsg += "Produto\n"
        }
        if (infMsg != "") {
            swal("Campos pendentes", infMsg, "warning")
        }
    }
}

$("#lista_precos select").each(function () {

    let id = $(this).prop("id");

    if (id == "inp-lista_preco_id") {

        $(this).select2({
            minimumInputLength: 2,
            language: "pt-BR",
            placeholder: "Digite para buscar a lista de preço",
            theme: "bootstrap4",
            dropdownParent: $(this).parent(),
            ajax: {
                cache: true,
                url: path_url + "api/lista-preco/pesquisa",
                dataType: "json",
                data: function (params) {
                    console.clear();
                    var query = {
                        pesquisa: params.term,
                        empresa_id: $("#empresa_id").val(),
                        usuario_id: $("#usuario_id").val(),
                        tipo_pagamento_lista: $("#inp-tipo_pagamento_lista").val(),
                        funcionario_lista_id: $("#inp-funcionario_lista_id").val(),
                    };
                    return query;
                },
                processResults: function (response) {
                    // console.log(response)
                    var results = [];

                    $.each(response, function (i, v) {
                        var o = {};
                        o.id = v.id;

                        o.text = v.nome + " " + v.percentual_alteracao + "%";
                        o.value = v.id;
                        results.push(o);
                    });
                    return {
                        results: results,
                    };
                },
            },
        });
    }
});

function selecionaLista(){
    let tipo_pagamento_lista = $('#inp-tipo_pagamento_lista').val()
    let funcionario_lista_id = $('#inp-funcionario_lista_id').val()
    let lista_preco_id = $('#inp-lista_preco_id').val()

    if(!lista_preco_id){
        swal("Alerta", "Selecione a lista", "warning")
        return;
    }

    if(tipo_pagamento_lista){
        $('#inp-tipo_pagamento').val(tipo_pagamento_lista).change()
    }
    if(funcionario_lista_id){
        $.get(path_url + "api/funcionarios/find", {id: funcionario_lista_id})
        .done((res) => {
            // console.log(res)
            var newOption = new Option(res.nome, res.id, true, false);
            $('#inp-funcionario_id').append(newOption);
            $('.funcionario_selecionado').text(res.nome)

        })
        .fail((err) => {
            console.log(err);
        });
    }

    $('#lista_id').val(lista_preco_id)
    let text = $('#inp-lista_preco_id option:selected').text()
    $('.lista_selecionada').text('Lista selecionada: ' + text)


    setTimeout(() => {
        $("#codBarras").focus();
    }, 500)
}

$("body").on("change", "#inp-lista_preco_id", function () {
    $.get(path_url + "api/lista-preco/find", {id: $(this).val()})
    .done((res) => {
        // console.log(res)
        $('#inp-tipo_pagamento_lista').val(res.tipo_pagamento).change()

        if(res.funcionario_id){
            $('#inp-funcionario_lista_id').val(res.funcionario_id).change();
        }
    })
    .fail((err) => {
        console.log(err);
    });
})
