$('#tutorial').on('click', function () {
    $(document).ready(async function () {
        const driver = new Driver({
            doneBtnText: 'Sair',
            closeBtnText: 'Fechar',
            nextBtnText: 'Próximo',
            prevBtnText: 'Anterior',
            allowClose: false
        });
        driver.defineSteps([{
            element: '#btn-filtros',
            popover: {
                title: 'Botão Filtros',
                description: 'Clique aqui para abrir os campos disponíveis de filtro.',
                position: 'right'
            }
        },
        {
            element: '#collapseFiltros',
            popover: {
                title: 'Filtros Disponíveis',
                description: 'Filtre os dados conforme sua necessidade.',
                position: 'top'
            }
        },
        {
            element: '#tabelaRegistros_wrapper',
            popover: {
                title: 'Registros bloqueados',
                description: 'Aqui você verá os registros bloqueados, ou seja, que ficaram presos por algum usuário.',
                position: 'top'
            }
        },
        {
            element: '#btn-liberar',
            popover: {
                title: 'Botão Liberar',
                description: 'Aqui você efetuará a liberação dos registros selecionados na lista.',
                position: 'top'
            }
        }
        ]);
        //inicio tour

        driver.start();

        // inicior tuor
        //final
    });
});
$(document).ready(async function () {

    let listaRegistros = [];
    var empresasUsuario = '';

    var tabelaRegistros = $('#tabelaRegistros').DataTable({
        destroy: true,
        select: true,
        keys: true,
        searching: true,
        lengthChange: false,
        scrollY: "400px",
        scrollCollapse: true,
        paging: false,
        "scrollCollapse": true,
    });

    async function buscaRegistros() {
        var _url = `/sisplan/controleedicao/v1/controleedicao?`;
        var sTela = $('#txtTela').val();
        let sEmpresas = await formataListas($('#txtEmpresa').val().toString());
        sTela = sTela == '' ? 'TODOS' : sTela;
        if ((sEmpresas == '') && (empresasUsuario != '')) { //quando carregou a tela, carregou as empresas vinculadas ao Usuario, ai ele limpou o filtro, nesse caso deve se manter filtrando as do usuario...
            sEmpresas = empresasUsuario;
        }

        try {
            $.LoadingOverlay("Show");
            try {
                var response = await requisicao('GET', _url, `TELA=${sTela}&EMPRESAS=${sEmpresas}&VALOR=${$('#txtValor').val()}&USUARIO_FILTRO=${$('#txtUsuario').val()}`, null);

                if (!response) {
                    return;
                }

                var jsonStr = await response.json()
                if (response.status != 200) {
                    msgErro(jsonStr['RESULT'][0].mensagem);
                    return;
                }

                return jsonStr;
            } catch (error) {
                console.error(error);
                msgErro('Não foi possível buscar os dados dos registros.');
            }
        } finally {
            $.LoadingOverlay("Hide");
        }
    }

    $('#btn-liberar').on('click', async function () {
        $.LoadingOverlay("show");
        try {
            // for (let i = 0; i < $('.campoCheck.selecionado').length; i++) {
            //     var indice = $('.campoCheck.selecionado')[i].closest('tr').rowIndex - 1;
            //     var data = $('#tabelaRegistros').DataTable().row(indice).data();
            //     await deletaRegistro(data.TELA, data.USUARIO, data.VALOR);
            // }
            for (let i = 0; i < listaRegistros.length; i++) {
                await deletaRegistro(listaRegistros[i].TELA, listaRegistros[i].USUARIO, listaRegistros[i].VALOR);
            };

            if (listaRegistros.length > 0) {
                msgSucesso('Processo concluído');
                listaRegistros = [];
            } else {
                msgErro('Nenhum registro selecionado')
            }
            $('#btn-consultar').trigger('click');
        } finally {
            $.LoadingOverlay("hide");
        }
    });

    $('#btnLimparFiltros').click(async function () {
        $('#txtTela').val('');
        $('#txtUsuario').val('');
        $('#txtValor').val('');
        $('#txtEmpresa').empty().trigger('change');
    });

    componenteFiltro('empresa', true, true);

    async function filtraEmpresasUsuario() {
        const dadosSelect = {
            orderBy: ['EMPRESA.EMP_PAT'],
            tabela: `ACESSO_EMPRESA`,
            leftJoin: [{ "tabela": "EMPRESA", "condicao": "REPLACE(EMPRESA.EMP_PAT,'_','') = ACESSO_EMPRESA.EMPRESA" }],
            camposSelect: ['EMPRESA.EMP_ID', 'ACESSO_EMPRESA.EMPRESA', 'EMPRESA.EMP_NOME', 'EMPRESA.EMP_FANTASIA'],
            where: [`ACESSO_EMPRESA.USUARIO = '${getCookie('cod_usuario')}'`],
        };
        const retornoSelect = await retornaJsonPesquisaPadrao(JSON.stringify(dadosSelect));
        if (!retornoSelect) {
            return;
        }
        if (retornoSelect && retornoSelect.length > 0) {
            await insereValorPesquisaVarios('txtEmpresa', 'EMP_ID', 'EMP_NOME', retornoSelect);
            empresasUsuario = await formataListas($('#txtEmpresa').val().toString());
            const filtraEmpresas = empresasUsuario != '' ? ` AND EMP_ID IN (SELECT EMP_ID FROM EMPRESA WHERE REPLACE(EMP_PAT, '_','') IN (${empresasUsuario}))` : '';
            const autoCompletaEmpresa = {
                tabela: "EMPRESA",
                camposSelect: ["REPLACE(EMP_PAT, '_', '')", "EMP_NOME"],
                where: [`1=1${filtraEmpresas}`],
                groupBy: ["EMPRESA.EMP_PAT", "EMPRESA.EMP_NOME", "EMPRESA.EMP_ID"],
                orderBy: ["EMP_PAT"]
            };
            const pesquisaServerSideEmpresa = {
                tabela: "EMPRESA",
                camposSelectSubSelect: ["EMP_PAT", "EMP_NOME"],
                camposSelect: ["REPLACE(EMP_PAT, '_', '') EMP_PAT", "EMP_NOME"],
                where: [`1=1${filtraEmpresas}`],
                groupBy: ["EMPRESA.EMP_PAT", "EMPRESA.EMP_NOME", "EMPRESA.EMP_ID"],
                orderBy: ["EMP_PAT"],
                groupBySubSelect: ["EMP_PAT", "EMP_NOME"]
            };

            $('#txtEmpresa').pesquisa_variosServerside(1, JSON.stringify(autoCompletaEmpresa), 'REPLACE', 'EMP_NOME');
            $('#btnEmpresa').pesquisa_serversideSel('#txtEmpresa', JSON.stringify(pesquisaServerSideEmpresa), 'Pesquisa Empresa');
            await insereValorPesquisaVarios('txtEmpresa', 'EMPRESA', 'EMP_NOME', retornoSelect); //devolve pro filtro, pq os eventos acima limpam
        }
    }


    $('#btn-consultar').on('click', async function () {

        var dataSet = await buscaRegistros();
        var dataSetCols = [];

        if (dataSet.length > 0) {
            var keys = Object.keys(dataSet[0]);
            dataSetCols.push({
                'title': 'SEL',
                'data': 'SEL',
                'width': '15px'
            });

            dataSetCols[0].render = function (data, type, row, meta) {
                return '<div class="group-default form-group">' +
                    '<div class="relative icheck-primary">' +
                    '<input style="height:20px" type="checkbox" id="check_col_' + [meta.row] + '_row_' + [meta.col] + '" class="input-default focus form-control validate campoCheck"><label for="check_col_' + [meta.row] + '_row_' + [meta.col] + '"></label>' +
                    '</div>' +
                    '</div>';
            }

            for (var k in keys) {
                dataSetCols.push({
                    'title': keys[k],
                    'data': keys[k]
                });
            }
            dataSetCols[4].type = 'date-br';

            tabelaRegistros = $('#tabelaRegistros').DataTable({
                destroy: true,
                select: true,
                keys: true,
                searching: true,
                lengthChange: false,
                scrollY: "400px",
                scrollCollapse: true,
                paging: false,
                "scrollCollapse": true,
                "data": dataSet,
                "columns": dataSetCols,
                "columnDefs": [{
                    className: "dt-head-center"
                }]
            });

            $('.campoCheck').on('change', function () {
                if (this.checked) {
                    $(this).addClass('selecionado');
                } else {
                    $(this).removeClass('selecionado');
                }
            });

            $('.campoCheck').on('change', function () {
                if (this.checked) {
                    if (listaRegistros.findIndex(item => item.TELA == this.parentNode.parentNode.parentNode.parentNode.cells[1].textContent && item.USUARIO == this.parentNode.parentNode.parentNode.parentNode.cells[2].textContent && item.VALOR == this.parentNode.parentNode.parentNode.parentNode.cells[3].textContent) == -1) {
                        listaRegistros.push({
                            "TELA": this.parentNode.parentNode.parentNode.parentNode.cells[1].textContent,
                            "USUARIO": this.parentNode.parentNode.parentNode.parentNode.cells[2].textContent,
                            "VALOR": this.parentNode.parentNode.parentNode.parentNode.cells[3].textContent
                        })
                    }
                } else {
                    const index = listaRegistros.findIndex(item => item.TELA == this.parentNode.parentNode.parentNode.parentNode.cells[1].textContent && item.USUARIO == this.parentNode.parentNode.parentNode.parentNode.cells[2].textContent && item.VALOR == this.parentNode.parentNode.parentNode.parentNode.cells[3].textContent);
                    listaRegistros.splice(index, 1);
                };
            })
        } else {
            tabelaRegistros = $('#tabelaRegistros').DataTable({
                autoWidth: true,
                destroy: true,
                "scrollCollapse": true,
                "data": dataSet,
                "columnDefs": [{
                    className: "dt-head-center"
                }]
            });
        }
        $('#modal-filtros').modal('hide');
    });

    $('#check_todos').on('change', function () {
        let isChecked = $(this).prop('checked');
        $('.campoCheck').prop('checked', isChecked).toggleClass('selecionado', isChecked);
        if (isChecked == true) {
            for (let i = 0; i < $('#tabelaRegistros').DataTable().data().count(); i++) {
                if (listaRegistros.findIndex(item => item.TELA == $('#tabelaRegistros').DataTable().data()[i].TELA && item.USUARIO == $('#tabelaRegistros').DataTable().data()[i].USUARIO && item.VALOR == $('#tabelaRegistros').DataTable().data()[i].VALOR) == -1) {
                    listaRegistros.push({
                        "TELA": $('#tabelaRegistros').DataTable().data()[i].TELA,
                        "USUARIO": $('#tabelaRegistros').DataTable().data()[i].USUARIO,
                        "VALOR": $('#tabelaRegistros').DataTable().data()[i].VALOR
                    });
                }
            }
        } else {
            listaRegistros = []
        };
    });
    
    await filtraEmpresasUsuario();

    $('#btn-consultar').trigger('click');
});