$(document).ready(async function () { 

    $("#txtAddRepresentante").autocompleta(1, `JSON={ "tabela":"REPRESEN", "camposSelect":["CODREP CHAVE, NOME DESCRICAO"], "where": [] }`);
    $("#btnAddRepresentante").pesquisa("#txtAddRepresentante", "CODREP", "NOME", '/sisplan/funcoes/v1/pesquisa?JSON={ "tabela":"REPRESEN", "camposSelect":[ "CODREP", "NOME" ], "where": null}', "Pesquisa Representante", "REPRESEN");
    $("#btnLimpaAddRepresentante").on('click', function () {
        $('#txtAddRepresentante').val('');
    });

    $('#btnAdicionarRepresentante').on('click', async function () {
        const obj = {
            CODREP: pegaChave('#txtAddRepresentante'),
            NOME: pegaDescricao('#txtAddRepresentante'),
            COM1: pegaValor('#txtAddComFat'),
            COM2: pegaValor('#txtAddComRec')
        }

        if (pegaChave('#txtAddRepresentante') === pegaChave('#txtRepresentante')) {
            msgAlerta('Não pode inserir duas vezes o mesmo representante, verifique!')
            return;
        }

        if (($.fn.DataTable.isDataTable('#tabelaRepresentantes')) && ($("#tabelaRepresentantes").DataTable().data().count() > 0)) {
            $('#tabelaRepresentantes').DataTable().rows().data().toArray().filter((item) => {
                let codigoTabela = item.CODREP ? item.CODREP.match(/\d+/)[0] : null;
                let codigoInput = pegaChave('#txtAddRepresentante');
                if (codigoTabela == codigoInput) {
                    throw msgAlerta(`Não pode inserir duas vezes o mesmo representante (${codigoInput}), verifique!`);
                }
            });

            if (!$('#txtAddRepresentante').val()) {
                throw msgAlerta('Código do representante não preenchido, impossível continuar!')
            }

            $('#tabelaRepresentantes')
                .DataTable()
                .row
                .add(obj).draw(false);

            $('#txtAddRepresentante').val('');
            $('#txtAddComFat').val(0.00);
            $('#txtAddComRec').val(0.00);

            return;
        };


        const titulosRepresentantes = [
            { title: "Codigo", data: "CODREP" },
            { title: "Nome", data: "NOME" },
            { title: "Com. Fat.", data: "COM1" },
            { title: "Com. Rec.", data: "COM2" }
        ];

        $("#tabelaRepresentantes").DataTable({
            destroy: true,
            filter: false,
            paging: false,
            scrollX: true,
            autoWidth: true,
            columns: titulosRepresentantes,
            data: [obj],
            columnDefs: [
                {
                    "render": function (data) {
                        return parseFloat(data).toLocaleString("pt-BR", {
                            maximumFractionDigits: 2,
                            minimumFractionDigits: 2
                        })
                    },
                    "targets": [2, 3],
                    "className": 'pr-4 text-right'
                },
                {
                    targets: [0],
                    render: function (data, type, row) {
                        return '<div style="text-align:start;"> ' +
                            '    <button class="btn btn-info btn-sm dropdown-toggle btnVerificaOpcoes" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> ' +
                            '      ' + data + ' ' +
                            '    </button> ' +
                            '    <div class="dropdown-menu"> ' +
                            '    <button class="dropdown-item" type="button" title="Excluir" id="btn-excluir">Excluir</button>  ' +
                            '</div>';
                    },
                },
            ]
        });

        $('#txtAddRepresentante').val('');
        $('#txtAddComFat').val(0.00);
        $('#txtAddComRec').val(0.00);
    });

    $('#tabelaRepresentantes').on('click', '#btn-excluir', async function () {
        msgAlerta('Você realmente deseja excluir esse registro?', async () => {
            const data = $("#tabelaRepresentantes").DataTable().row($(this).parents("tr"));
            data.remove().draw(false);
        });
    });    

})

function buscaDadosRepresentantes(descricaoCampoChave, campoChave) {
    let dados;
    if ($.fn.DataTable.isDataTable('#tabelaRepresentantes')) {
        const tabelaRepresentantes = $('#tabelaRepresentantes').DataTable().rows().data().toArray();

        dados = tabelaRepresentantes.map((item) => ({
            [descricaoCampoChave]: campoChave,
            codRep: item.CODREP ? item.CODREP.match(/\d+/)[0] : '',
            com1: parseFloat(item.COM1),
            com2: parseFloat(item.COM2)
        }))
    } else {
        dados = []
    }

    return dados
}